求助区间dp思路有什么问题
查看原帖
求助区间dp思路有什么问题
763878
Jerry_heng楼主2023/8/10 09:38
#include<bits/stdc++.h>
using namespace std;
int n,a[5001],dp[5001][5001][2];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		dp[i][i][1]=a[i];
		dp[i][i][0]=0;
	}
	for(int i=1;i<n;i++){
		dp[i][i+1][1]=max(a[i],a[i+1]);
		dp[i][i+1][0]=min(a[i],a[i+1]);
	}
	for(int len=3;len<=n;len++){
		for(int l=1;l<=len-n+1;l++){
			int r=l+len-1;
			if(a[l]+dp[l+1][r][0]>a[r]+dp[l][r-1][0]){
				dp[l][r][1]=a[l]+dp[l+1][r][0];
				dp[l][r][0]=dp[l+1][r][1];
			}
			else{
				dp[l][r][1]=a[r]+dp[l][r-1][0];
				dp[l][r][0]=dp[l][r-1][1];
			}
		}
	}
	printf("%d",dp[1][n][1]);
	return 0;
}
2023/8/10 09:38
加载中...