1 条题解

  • 0
    @ 2025-10-8 16:53:58
    #include<bits/stdc++.h>
    using namespace std;
    int a[401], f[401][401], d[401][401];
    int main()
    {
        int n; scanf("%d", &n);
        for(int i=1; i<=n; i++) scanf("%d", &a[i]), a[i+n] = a[i];
        memset(f, 63, sizeof(f));
        for(int i=1; i<=2*n; i++) d[i][i] = a[i], f[i][i] = 0;
        for(int L=2; L<=n; L++)
            for(int st=1; st<=2*n-L+1; st++)
            {
                int ed = st + L - 1;
                for(int k=st; k<ed; k++)
                    if(f[st][ed] > f[st][k] + f[k+1][ed] + abs(d[st][k] - d[k+1][ed]))
                    {
                        f[st][ed] = f[st][k] + f[k+1][ed] + abs(d[st][k] - d[k+1][ed]);
                        d[st][ed] = max(d[st][k], d[k+1][ed]);
                    }
            }
        int ans = 0x3fffffff;
        for(int i=1; i<=n; i++) ans = min(ans, f[i][i+n-1]);
        printf("%d\n", ans);
        return 0;
    }
    
    • 1

    *【动态规划:区间中间推】比武大会[GDOI2006]

    信息

    ID
    771
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    28
    已通过
    19
    上传者