QOJ.ac

QOJ

ID提交记录ID题目HackerOwner结果提交时间测评时间
#1516#820424#9879. ReTravelSurvivor_winnerHuTaoFailed.2025-02-05 09:48:502025-02-05 09:48:51

详细

Extra Test:

Invalid Input

input:

2
3 3
1 2
1 3

output:


result:

FAIL Expected EOF (stdin, line 4)

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#820424#9879. ReTravelHuTaoAC ✓3ms8924kbC++14865b2024-12-18 21:24:292024-12-18 21:24:36

answer

#include <bits/stdc++.h>

using namespace std;

const int N = 505;

int n;
int x[N][N], y[N][N], s[N][N];
long long f[N][N];

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++ ) scanf("%d%d", &x[i][i], &y[i][i]);
    memset(f, 0x3f, sizeof f);
    for(int i = n; i >= 1; i -- )
    {
        s[i][i] = i;
        f[i][i] = 0;
        for(int j = i + 1; j <= n; j ++ )
        {
            x[i][j] = min(x[i][j - 1], x[j][j]);
            y[i][j] = min(y[i][j - 1], y[j][j]);
            for(int k = s[i][j - 1]; k <= s[i + 1][j]; k ++ )
            {
                long long w = f[i][k] + f[k + 1][j] + abs(x[i][k] - x[k + 1][j]) + abs(y[i][k] - y[k + 1][j]);
                if(w < f[i][j]) f[i][j] = w, s[i][j] = k;
            }
        }
    }
    printf("%lld\n", f[1][n] + x[1][n] + y[1][n]);
    return 0;
}