首页 > 其他 > 详细

区间DP搬石子

时间:2020-02-25 01:12:58      阅读:55      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 这题比较特殊,石头按照环形放置

 

首位相接把数组复制两次就好了

 

最后枚举一下就行

 

#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxn = 300;
ll mx[maxn][maxn];
ll mi[maxn][maxn];
int list[maxn];
ll cns[maxn];

int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&list[i]);
		list[n+i] = list[i];
	}
	for(int i=1;i<=2*n;i++){
		cns[i] += cns[i-1] + list[i];
	}
	for(int len = 2;len<=2*n;len++){
		for(int l = 1;l<=2*n - len + 1;l++){
			
			int r = l+len - 1;
			mi[l][r] = 1e15;
			
			for(int k = l;k<r;k++){
				mi[l][r] = min(mi[l][r],mi[l][k] + mi[k+1][r]);
				
				mx[l][r] = max(mx[l][r],mx[l][k] + mx[k+1][r]);
			}
			mi[l][r] += cns[r] - cns[l-1];
			mx[l][r] += cns[r] - cns[l-1];
		}
	}
	ll a = 1e16;
	ll b = -1;
	for(int i=1;i<=n;i++){
		a = min(a,mi[i][i+n-1]);
		b = max(b,mx[i][i+n-1]);
	}
	printf("%lld\n%lld\n",a,b);
	return 0;
} 

  

区间DP搬石子

原文:https://www.cnblogs.com/lesning/p/12359668.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!