fork download
  1. #include<stdio.h>
  2. struct xy {
  3. int x, y;
  4. }a[1212],b[1212];
  5. int dist(xy a, xy b) {return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);}
  6. int D[1212][1212][2];
  7. int min(int a, int b) { if (a < b)return a; return b; }
  8. int main() {
  9. int n, m;
  10. int i, j;
  11. scanf("%d%d", &n, &m);
  12. for (i = 0; i <= m; i++)D[0][i][0] = D[0][i][1] = 2e9;
  13. D[0][0][0] = 0;
  14. for (i = 1; i <= n; i++)scanf("%d%d", &a[i].x, &a[i].y);
  15. for (i = 1; i <= m; i++)scanf("%d%d", &b[i].x, &b[i].y);
  16. a[0] = a[1];
  17. for (i = 1; i <= n; i++) {
  18. D[i][0][1] = 2e9;
  19. D[i][0][0] = D[i - 1][0][0] + dist(a[i - 1], a[i]);
  20. for (j = 1; j <= m; j++) {
  21. D[i][j][0] = min(D[i - 1][j][0] + dist(a[i - 1], a[i]), D[i - 1][j][1] + dist(b[j], a[i]));
  22. D[i][j][1] = min(D[i][j - 1][0] + dist(a[i], b[j]), D[i][j - 1][1] + dist(b[j - 1], b[j]));
  23. }
  24. }
  25. printf("%d", D[n][m][0]);
  26. return 0;
  27. }
Success #stdin #stdout 0s 4140KB
stdin
3 2
0 0
1 0
2 0
0 3
1 3
stdout
20