Advertisement
K_Y_M_bl_C

Untitled

Dec 16th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. const int Q = 1007;
  2.  
  3. int n, m;
  4. ll dp[Q][Q][2];
  5. pll a[Q], b[Q];
  6.  
  7. ll getdst(ll x, ll y, ll x1, ll y1)
  8. {
  9.     return (x - x1) * (x - x1) + (y - y1) * (y - y1);
  10. }
  11.  
  12. int solve()
  13. {
  14.     scanf("%d %d", &n, &m);
  15.     forn(i, n)
  16.         scanf("%I64d %I64d", &a[i].X, &a[i].Y);
  17.     forn(i, m)
  18.         scanf("%I64d %I64d", &b[i].X, &b[i].Y);
  19.    
  20.     forn(i1, n + 1)
  21.         forn(j1, m + 1)
  22.             forn(k, 2)
  23.             {
  24.                 dp[i1][j1][k] = LINF;
  25.                 if (i1 == 0 && j1 == 0)
  26.                     dp[i1][j1][k] = 0;
  27.                 if (i1 == 1 && j1 == 0)
  28.                     dp[i1][j1][k] = 0;
  29.                 if (!k)
  30.                 {
  31.                     int i = i1 - 1;
  32.                     int j = j1 - 1;
  33.                     if (i > 0)
  34.                     {
  35.                         ll dst1 = getdst(a[i].X, a[i].Y, a[i - 1].X, a[i - 1].Y);
  36.                         dp[i1][j1][k] = min(dp[i1][j1][k], dp[i][j + 1][0] + dst1);
  37.                     }
  38.                     if (j >= 0 && i >= 0)
  39.                     {
  40.                         ll dst2 = getdst(a[i].X, a[i].Y, b[j].X, b[j].Y);
  41.                         dp[i1][j1][k] = min(dp[i1][j1][k], dp[i][j + 1][1] + dst2);
  42.                     }
  43.                 }
  44.                 else
  45.                 {
  46.                     int i = i1 - 1;
  47.                     int j = j1 - 1;
  48.                     if (j >= 0 && i >= 0)
  49.                     {
  50.                         ll dst1 = getdst(b[j].X, b[j].Y, a[i].X, a[i].Y);
  51.                         dp[i1][j1][k] = min(dp[i1][j1][k], dp[i + 1][j][0] + dst1);
  52.                     }
  53.                     if (j > 0)
  54.                     {
  55.                         ll dst2 = getdst(b[j].X, b[j].Y, b[j - 1].X, b[j - 1].Y);
  56.                         dp[i1][j1][k] = min(dp[i1][j1][k], dp[i + 1][j][1] + dst2);
  57.                     }
  58.                 }
  59.             }
  60.     printf("%lld", dp[n][m][0]);
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement