其他分享
首页 > 其他分享> > hdu4283——经典区间dp

hdu4283——经典区间dp

作者:互联网

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4283

 

都知道cry非常喜欢和小姐姐一起"玩耍",每个小姐姐他都要花一定的时间和她们玩耍,但是玩耍时要到隐蔽的地方去,因此他每次只能选择一个小姐姐,而让其他小姐姐耐心等待。
这一天他约了一大堆的小姐姐数了数竟然有n个漂亮小姐姐,n个小姐姐排成一排依次和cry一起玩耍,每个小姐姐们都有一个"耐心值"m,当cry要和第i个小姐姐一起玩耍时,小姐姐的耐心度会是(i-1)*m,因为cry让她之前等待了i-1个人。
cry非常的贪心,他为了获取最大的快乐,即让总的小姐姐的耐心度之和最小,想了一个办法,他花重金准备了一大堆的化妆品,当需要和第j个小姐姐一起玩的时候,让她先去化妆继续等待,这样就可以先和后面的小姐姐一起玩耍,减少队伍后面小姐姐等待的人数。当小姐姐化好妆后也可以和cry一起做游戏,但是只能选取当前最后开始化妆的小姐姐和cry一起玩耍(可能是小姐姐迷恋化妆,无法自拔),也即是先开始化妆的要最后才能玩耍。通过这样的方式改变了小姐姐和cry玩耍的顺序,cry就能获取最大的快乐。
但是cry一想到要和小姐姐一起玩就不想自己决定顺序,希望你能帮帮他。

Input

多组输入用例T,每组第一行是小姐姐的数量,以下n行按照顺序表示第1个到第n个小姐姐的耐心度m对于每组数据输出,一行输出一个值,代表cry的最大快乐值,即小姐姐们耐心值的最小和。(1<=n<=100,0<=m<=100)

Output

输出cry的最大快乐值,具体输出参照样例。

Sample Input

3
7
1 3 5 2 6 4 3
3
1 2 3
4
1 2 3 4

Sample Output

Case #1: 52
Case #2: 4
Case #3: 10

hint

对于第二组样例,先让1号小姐姐化妆,再让二号小姐姐化妆,因此第一个和3号小姐姐玩tot_m=0,按照规则再和第二个小姐姐玩tot_m=tot_m+2(耐心值)1(前面等待了1个)=2,最后和第一个小姐姐玩,tot_m=tot_m+1(耐心值)2(前面等待了2个)=4;

对于第三组样例,先让1号小姐姐化妆,再让2号小姐姐化妆,再让3号小姐姐化妆,因此第一个和4号小姐姐玩tot_m=0,按照规则再和第3个小姐姐玩tot_m=tot_m+3(耐心值)1(前面等待了1个)=3,再和第二个小姐姐玩,tot_m=tot_m+2(耐心值)2(前面等待了2个)=7;最后和第1个小姐姐玩tot_m=tot_m+1(耐心值)*3(前面等待了3个)=10;
cry看了这个题,cry着问为啥不给第一组的解析呢!因为,我也不知道~~~~~

 

 

 

 


 

 


 

 

 

 

 

 

 

区间dp好题,代码不长,但是状态转移方程不是很好想。

状态:dp[i][j]表示从i区间到j区间的最小耐心值

状态转移方程:dp[i][j]=min{dp[i][k]+dp[k][j]+v[i]*(k-1)+(sum[j]-sum[k])*k}

边界:dp[i][i]=0;

sum数组为耐心值的前缀和

#include <iostream>
using namespace std;
int main(int argc, char** argv) {
	int T,n,v[105],dp[105][105],sum[105];
	scanf("%d",&T);
	for(int ncase=1;ncase<=T;++ncase){
		scanf("%d",&n);
		sum[0]=0;
		for(int i = 1;i<=n;++i){
			scanf("%d",&v[i]);
			dp[i][i]=0;
			sum[i]=sum[i-1]+v[i];
		}
		for(int len=1;len<n;++len){
			for(int i = 1;i+len<=n;++i){
				dp[i][i+len]=min(sum[i+len]-sum[i]+dp[i+1][i+len],dp[i+1][i+len]+v[i]*len);
				for(int k = 2;k<=len;++k)
					dp[i][i+len]=min(dp[i][i+len],dp[i+1][i+k-1]+(k-1)*v[i]+(sum[i+len]-sum[i+k-1])*k+dp[i+k][i+len]);
			}
		}
		printf("Case #%d: %d\n",ncase,dp[1][n]);
	}
	return 0;
}

标签:hdu4283,小姐姐,化妆,cry,tot,耐心,经典,dp
来源: https://blog.csdn.net/qq_43472263/article/details/98327593