fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4. const ll INF = (ll)9e18;
  5.  
  6. int h, g;
  7. vector<pair<ll,ll>> H, G;
  8.  
  9. ll dist(const pair<ll,ll> &a, const pair<ll,ll> &b){
  10. ll dx = a.first - b.first;
  11. ll dy = a.second - b.second;
  12. return dx*dx + dy*dy;
  13. }
  14.  
  15. int main(){
  16. scanf("%d %d", &h, &g);
  17. H.resize(h+1);
  18. G.resize(g+1);
  19. for(int i = 1; i <= h; i++)
  20. scanf("%lld %lld", &H[i].first, &H[i].second);
  21. for(int j = 1; j <= g; j++)
  22. scanf("%lld %lld", &G[j].first, &G[j].second);
  23.  
  24. // dp[i][j][0]: min energy visiting H1..Hi & G1..Gj, ending at Hi
  25. // dp[i][j][1]: same, ending at Gj
  26. static ll dp[1010][1010][2];
  27. for(int i = 0; i <= h; i++)
  28. for(int j = 0; j <= g; j++)
  29. dp[i][j][0] = dp[i][j][1] = INF;
  30.  
  31. // Base: start at H1
  32. dp[1][0][0] = 0;
  33.  
  34. // Pure‐Holstein prefix
  35. for(int i = 2; i <= h; i++)
  36. dp[i][0][0] = dp[i-1][0][0] + dist(H[i], H[i-1]);
  37.  
  38. // First jump from H to G1
  39. if(g >= 1)
  40. dp[1][1][1] = dp[1][0][0] + dist(H[1], G[1]);
  41.  
  42. // Pure‐Guernsey prefix (after H1)
  43. for(int j = 2; j <= g; j++)
  44. dp[1][j][1] = dp[1][j-1][1] + dist(G[j], G[j-1]);
  45.  
  46. // Fill the 2D DP
  47. for(int i = 1; i <= h; i++){
  48. for(int j = 1; j <= g; j++){
  49. if(i > 1) {
  50. dp[i][j][0] = min(
  51. dp[i-1][j][0] + dist(H[i], H[i-1]),
  52. dp[i-1][j][1] + dist(H[i], G[j])
  53. );
  54. }
  55. if(j > 1) {
  56. dp[i][j][1] = min(
  57. dp[i][j-1][1] + dist(G[j], G[j-1]),
  58. dp[i][j-1][0] + dist(G[j], H[i])
  59. );
  60. }
  61. }
  62. }
  63.  
  64. // Must finish at the last Holstein
  65. printf("%lld\n", dp[h][g][0]);
  66. return 0;
  67. }
  68.  
Success #stdin #stdout 0.01s 5308KB
stdin
46 152
41 50
82 40
30 69
5 50
46 62
39 24
66 13
39 23
34 100
70 51
21 49
90 2
90 62
88 40
9 49
22 75
83 18
9 33
20 68
54 78
81 10
6 76
87 72
64 20
50 46
95 85
33 80
70 98
77 13
59 83
93 16
13 6
19 75
6 70
66 92
58 30
60 29
13 54
48 68
59 58
19 38
93 90
73 63
61 48
61 63
98 75
28 2
55 57
0 64
53 100
40 39
74 95
72 43
67 69
53 76
25 66
44 46
66 25
32 74
84 21
88 47
55 52
70 30
99 27
14 85
9 27
77 66
72 19
54 21
32 67
89 41
34 6
44 44
35 67
18 94
15 32
40 35
44 40
27 82
75 22
72 74
24 15
8 61
58 64
7 40
67 17
100 33
83 5
100 53
5 75
63 40
78 58
19 55
35 12
9 6
13 53
14 3
58 25
51 35
20 81
36 65
86 39
99 19
67 11
24 8
61 100
62 26
41 75
50 39
81 65
93 67
77 53
53 16
43 78
97 47
98 14
13 63
42 35
100 67
81 81
61 47
77 2
36 38
61 26
2 96
64 25
13 94
24 27
18 75
61 35
42 38
74 27
71 35
40 65
67 71
47 84
3 26
65 6
22 45
30 9
48 10
70 84
87 77
4 20
55 41
47 22
37 12
0 55
16 80
73 36
2 97
67 38
46 63
41 67
77 29
69 93
38 63
87 45
52 82
64 13
21 81
18 54
60 21
37 82
70 72
79 21
48 65
95 69
49 3
13 74
22 44
23 50
7 79
26 10
37 82
90 44
31 92
30 99
16 91
28 43
34 80
28 2
19 45
40 90
41 10
3 74
4 96
5 33
97 0
73 82
58 24
72 56
8 55
53 68
64 58
92 50
81 95
38 35
stdout
402218