区间DP40求调
查看原帖
区间DP40求调
1288139
Poker11037楼主2024/5/26 16:23

rt,区间DP样例输出最小值为44(人要疯了)

#include<bits/stdc++.h>
using namespace std;
const int N=205;
int n,dp[N][N],dp2[N][N],sum[2*N],a[2*N];
int main(){
	cin>>n;
	memset(dp,0x3f,sizeof dp);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		a[i+n]=a[i];
		dp[i][i]=0;
	}
	for(int i=1;i<=2*n;i++){
		sum[i]=sum[i-1]+a[i];
	}
	for(int len=2;len<=n;len++){
		for(int i=0;i<=2*n-len+1;i++){
			int j=len+i-1;
			for(int k=i;k<j;k++){
				dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
				dp2[i][j]=max(dp2[i][j],dp2[i][k]+dp2[k+1][j]+sum[j]-sum[i-1]);
			}
		}
	}
	int Min=INT_MAX,Max=0;
	for(int i=1;i<=n;i++){
		//cout<<dp[i][i+n-1]<<" "<<dp2[i][i+n-1]<<endl;
		Min=min(Min,dp[i][i+n-1]);
		Max=max(Max,dp2[i][i+n-1]);
	}
	cout<<Min<<endl<<Max;
	return 0;
}
2024/5/26 16:23
加载中...