请教一下为什么最小值错了,用的ACwing方法
查看原帖
请教一下为什么最小值错了,用的ACwing方法
481846
zxh2002楼主2022/2/3 14:05
#include<iostream>

using namespace std;

const int N=1002;
int n;
int dp[N][N];
int s[N];

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		s[i]=s[i]+s[i-1];
	}
	//数据预处理(设置前缀和数组)
	
	for(int len=2;len<=n;len++){
		for(int i=1;i+len-1<=n;i++){
			int j=i+len-1;	
			dp[i][j]=1e9;
			for(int k=i;k<=j-1;k++){
				dp[i][j]=min(dp[i][k]+dp[k+1][j]+s[j]-s[i-1],dp[i][j]);	
			}
		}
	}
	
	cout<<dp[1][n]<<endl;
	
	for(int len=2;len<=n;len++){
		for(int i=1;i+len-1<=n;i++){
			int j=i+len-1;	
			dp[i][j]=0;
			for(int k=i;k<=j-1;k++){
				dp[i][j]=max(dp[i][k]+dp[k+1][j]+s[j]-s[i-1],dp[i][j]);	
			}
		}
	}
	
	
	cout<<dp[1][n]<<endl;
	
	return 0;
}
2022/2/3 14:05
加载中...