5 条题解

  • 1
    @ 2025-12-14 9:47:57
    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    const int N=305;
    const int INF=0x3f3f3f3f;
    int dp[N][N];
    int a[N];
    int sum[N];
    int minn=INF;
    int maxx;
    int dp1[N][N];
    int main(){
    	cin>>n;
    	memset(dp,INF,sizeof(dp));
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    		a[i+n]=a[i];
    	}
    	for(int i=1;i<=2*n;i++){
    		dp[i][i]=0;
    		sum[i]=sum[i-1]+a[i];
    	}
    	//区间dp模板
    	for(int len=2;len<=n;len++){
        	for(int i=1;i<=2*n-len+1;i++){
           		int j=i+len-1;
           		for(int k=i;k<=j-1;k++){ 
             	    dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
             	    dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+sum[j]-sum[i-1]);
         		}
       		}
    	}
    	for(int i=1;i<=n;i++){
    		minn=min(minn,dp[i][i+n-1]);
    		maxx=max(maxx,dp1[i][i+n-1]);
    	}
    	cout<<minn<<endl<<maxx; 
    	return 0;
    }
    

    信息

    ID
    1639
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    235
    已通过
    96
    上传者