Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int Q = 1007;
- int n, m;
- ll dp[Q][Q][2];
- pll a[Q], b[Q];
- ll getdst(ll x, ll y, ll x1, ll y1)
- {
- return (x - x1) * (x - x1) + (y - y1) * (y - y1);
- }
- int solve()
- {
- scanf("%d %d", &n, &m);
- forn(i, n)
- scanf("%I64d %I64d", &a[i].X, &a[i].Y);
- forn(i, m)
- scanf("%I64d %I64d", &b[i].X, &b[i].Y);
- forn(i1, n + 1)
- forn(j1, m + 1)
- forn(k, 2)
- {
- dp[i1][j1][k] = LINF;
- if (i1 == 0 && j1 == 0)
- dp[i1][j1][k] = 0;
- if (i1 == 1 && j1 == 0)
- dp[i1][j1][k] = 0;
- if (!k)
- {
- int i = i1 - 1;
- int j = j1 - 1;
- if (i > 0)
- {
- ll dst1 = getdst(a[i].X, a[i].Y, a[i - 1].X, a[i - 1].Y);
- dp[i1][j1][k] = min(dp[i1][j1][k], dp[i][j + 1][0] + dst1);
- }
- if (j >= 0 && i >= 0)
- {
- ll dst2 = getdst(a[i].X, a[i].Y, b[j].X, b[j].Y);
- dp[i1][j1][k] = min(dp[i1][j1][k], dp[i][j + 1][1] + dst2);
- }
- }
- else
- {
- int i = i1 - 1;
- int j = j1 - 1;
- if (j >= 0 && i >= 0)
- {
- ll dst1 = getdst(b[j].X, b[j].Y, a[i].X, a[i].Y);
- dp[i1][j1][k] = min(dp[i1][j1][k], dp[i + 1][j][0] + dst1);
- }
- if (j > 0)
- {
- ll dst2 = getdst(b[j].X, b[j].Y, b[j - 1].X, b[j - 1].Y);
- dp[i1][j1][k] = min(dp[i1][j1][k], dp[i + 1][j][1] + dst2);
- }
- }
- }
- printf("%lld", dp[n][m][0]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement