[HDU1069]Monkey and Banana

题目大意:给你$n$种长方体,要你用这些长方体从下往上叠起来,下面的长方体的长和宽要严格大于上面的。求出最高能搭多高。

思路:先得出可以使用的长方体(长>宽,注意高也可以作为一条长或宽,那么一个长方体至少有3种不同的长宽高),然后根据长排序,接着DP就行了。

具体见代码。

C++ Code:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct cft{
	int a,b,h;
	bool operator<(const cft& rhs)const{
		if(a!=rhs.a)return a>rhs.a;
		return b>rhs.b;
	}
}box[122];
int dp[122];
int n;
int main(){
	int o=0;
	while(~scanf("%d",&n)&&n){
		int m=0;
		for(int i=1;i<=n;i++){//读入、处理
			int x[3];
			scanf("%d%d%d",&x[0],&x[1],&x[2]);
			sort(x,x+3);
			m++;
			box[m]=(cft){x[2],x[1],x[0]};
			m++;
			box[m]=(cft){x[2],x[0],x[1]};
			m++;
			box[m]=(cft){x[1],x[0],x[2]};
		}
		sort(box+1,box+1+m);
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=m;i++)dp[i]=box[i].h;
		for(int i=m-1;i>=1;i--)//DP begin
		for(int j=i+1;j<=m;j++)
		if(box[i].a>box[j].a&&box[i].b>box[j].b)
		if(dp[i]<dp[j]+box[i].h)dp[i]=dp[j]+box[i].h;//DP end
		printf("Case %d: maximum height = %d\n",++o,*max_element(dp+1,dp+1+m));
	}
	return 0;
}

  

时间: 2024-10-12 16:40:34

[HDU1069]Monkey and Banana的相关文章

HDU1069 Monkey and Banana 【DP】

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7816    Accepted Submission(s): 4028 Problem Description A group of researchers are designing an experiment to test the IQ of a

HDU1069 Monkey and Banana 简单dp

题意: 把给定的长方体(不限)叠加在一起,叠加的条件是,上面一个长方体的长和宽都比下面长方体的长和宽短: 求这些长方体能叠加的最高的高度.(其中(3,2,1)可以摆放成(3,1,2).(2,1,3)等). /* *********************************************** Author :devil Created Time :2015/12/7 20:38:42 ************************************************

HDU1069 Monkey and Banana(dp)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:给定n种类型的长方体,每个类型长方体无数个,要求长方体叠放在一起,且上面的长方体接触面积要小于下面,长宽也小于下面的长方体,求最高能叠放多高? 思路:首先每个长方体有三种情况可以作为底部,那么一共是3*n种类型的长方体,首先按长宽的大小排序,然后dp.dp[i]表示以第i块长方体为顶的最大高度,那么转移方程就是dp[i] = max(dp[i],dp[j] +  g[i]. h),形似一个L

ACM-经典DP之Monkey and Banana——hdu1069

***************************************转载请注明出处:http://blog.csdn.net/lttree*************************************** Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6984    Accep

[2016-03-30][HDU][1069][Monkey and Banana]

时间:2016-03-27 15:19:40 星期日 题目编号:[2016-03-30][HDU][1069][Monkey and Banana] 题目大意:给定n种积木无限个,问这些积木最大能叠多高,上面的积木长宽必须严格小于下面的积木 分析: dp[i]表示第i个积木在顶部时候的最大高度,那么dp[i] = max(dp[i],dp[j] + h[i]);?ji能放在j上面?ji能放在j上面 初始条件就是长宽最大的高度是它自己, #include <algorithm> #include

HDOJ 1069 Monkey and Banana 【DP】

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8610 Accepted Submission(s): 4452 Problem Description A group of researchers are designing an experiment to test the IQ of a monke

HDU 1069 Monkey and Banana(二维偏序LIS的应用)

---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13003    Accepted Submission(s): 6843 Problem Description A group of researchers are designing an experiment to te

HDU 1069 Monkey and Banana(DP 长方体堆放问题)

Monkey and Banana Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monkey is clever

HDU 1069 Monkey and Banana 基础DP

题目链接:Monkey and Banana 大意:给出n种箱子的长宽高.每种不限个数.可以堆叠.询问可以达到的最高高度是多少. 要求两个箱子堆叠的时候叠加的面.上面的面的两维长度都严格小于下面的. 简单的DP,依然有很多地发给当时没想到.比如优先级,比如这么简单粗暴的选择. 1 /* 2 大意是.给出n种箱子的长宽高.每种不限个数.可以堆叠.询问可以达到的最高高度是多少. 3 要求两个箱子堆叠的时候叠加的面.上面的面的两维长度都严格小于下面的. 4 5 样例: 6 10 20 30 7 10