其他分享
首页 > 其他分享> > 区间dp

区间dp

作者:互联网

区间dp一般是
形如 dp[i][j] = oper(dp[i][k],dp[k+1][j] ) + cost[i..j];
其中 oper可能是 求最大最小值,或乘法或加法,等等。
的dp
有一个比较简单题,可以对区间dp有个基本的了解https://www.acwing.com/problem/content/284/
此题思路如图所示

ac代码如下

#define NMAX 303

int nums[NMAX];
int sum[NMAX];
int dp[NMAX][NMAX];

int main(){
	int N;
	scanf("%d",&N);
	for(int i=0;i<N;++i){
		scanf("%d",&nums[i]);
	}
	for(int i=1;i<=N;++i){
		sum[i] = sum[i-1] + nums[i-1];
	}

	for(int l=2;l<=N;l++){
		for(int i=0;i+l-1<N;++i){
			int j = i+l-1;
			int tmp = INT_MAX;
			for(int k=i;k<j;++k){
				tmp = min(tmp,dp[i][k]+dp[k+1][j]);
			}
			dp[i][j] = tmp + sum[j+1] - sum[i];
		}
	}
	printf("%d\n",dp[0][N-1]);
	
	return 0;
}

标签:oper,NMAX,www,int,区间,dp
来源: https://www.cnblogs.com/kingbuffalo/p/16308837.html