Monkey and Banana(贪心+DP)

匿名 (未验证) 提交于 2019-12-02 23:49:02





Input

Output

Sample Input
1
10 20 30
2
6 8 10
5 5 5
7
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
0
Sample Output
Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342
题目大意:垒积木,积木有长宽高三个特征,只有积木A的两个基础尺寸都严格小于积木B的相应基础尺寸,那么A才能放在B的上面,问你积木可以垒到的最大高度

dp[i] 的含义是以i为最上面积木时的高度,初始化的话就是 dp[i] = nmb[i].z;状态转移:

dp[0] = nmb[i].z; for(int i=1;i<n*3;i++){ 	dp[i] = nmb[i].z; 	for(int j=0;j<i;j++){ 		if((nmb[i].x<nmb[j].x&&nmb[i].y<nmb[j].y)||(nmb[i].y<nmb[j].x&&nmb[i].x<nmb[i].y)) 			if(dp[i]<dp[j]+nmb[i].z) 				dp[i] = dp[j]+nmb[i].z; 	} } 

AC代码:

#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> const int inf = 0x3f3f3f3f; using namespace std; struct In{     int x,y,z; }; int dp[200]; bool cmp(In a,In b) {     return a.x*a.y>b.x*b.y; } int main(void) {     int n,mm=1;     while(scanf("%d",&n),n){         memset(dp,0,sizeof(dp));         In nmb[200];         int a,b,c,p=0;         for(int i=1;i<=n;i++){             scanf("%d%d%d",&a,&b,&c);             nmb[p].x = min(a,b);             nmb[p].y = max(a,b);             nmb[p].z = c;              nmb[p+1].x = min(a,c);             nmb[p+1].y = max(a,c);             nmb[p+1].z = b;              nmb[p+2].x = min(c,b);             nmb[p+2].y = max(c,b);             nmb[p+2].z = a;              p += 3;         }         sort(nmb,nmb+n*3,cmp);         dp[0] = nmb[0].z;         for(int i=1;i<n*3;i++){             dp[i] = nmb[i].z;             for(int j=0;j<i;j++){                 if((nmb[i].x<nmb[j].x&&nmb[i].y<nmb[j].y)||(nmb[i].x<nmb[j].y&&nmb[i].y<nmb[j].x)){                     if(dp[i]<dp[j]+nmb[i].z)                         dp[i] = dp[j]+nmb[i].z;                 }             }         }         int ans = 0;         for(int i=0;i<n*3;i++)             if(ans<dp[i])                 ans = dp[i];         printf("Case %d: maximum height = %d\n",mm,ans);         mm++;     }     return 0; } 
文章来源: https://blog.csdn.net/qq_43724031/article/details/96845122
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!