普通环形区间dp过不了,为什么?
查看原帖
普通环形区间dp过不了,为什么?
933148
Tom_cat666楼主2024/10/22 15:55
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<climits>
using namespace std;

int a[2005],sum[2005];
int fmi[2005][2005]={INT_MAX},fma[2005][2005];

int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        a[i+n]=a[i];      //环形,开2倍大小的数组
        sum[i]=sum[i-1]+a[i];     //sum保存前缀和
        sum[i+n]=sum[i];          //前缀和也保持环形
    }
    
    for(int len=2;len<=n;len++){
        for(int i=1;i<=(n<<1)-len+1;i++){
            int j=i+len-1;
            for(int k=i;k<j;k++){
                fma[i][j]=max(fma[i][j],fma[i][k]+fma[k+1][j]+sum[j]-sum[i-1]);
                fmi[i][j]=min(fmi[i][j],fmi[i][k]+fmi[k+1][j]+sum[j]-sum[i-1]);
            }
        }
    }
    cout<<fmi[1][n]<<endl;
    cout<<fma[1][n]<<endl;
    return 0;
}

问一下各位大佬,为什么普通的环形区间dp过不了啊?

2024/10/22 15:55
加载中...