hdoj1069 Monkey and Banana
Monkey and Banana
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5829 Accepted Submission(s): 2961
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
enough, it shall be able to reach the banana by placing one block on the
top another to build a tower and climb up to get its favorite food.
The
researchers have n types of blocks, and an unlimited supply of blocks
of each type. Each type-i block was a rectangular solid with linear
dimensions (xi, yi, zi). A block could be reoriented so that any two of
its three dimensions determined the dimensions of the base and the other
dimension was the height.
They want to make sure that the
tallest tower possible by stacking blocks can reach the roof. The
problem is that, in building a tower, one block could only be placed on
top of another block as long as the two base dimensions of the upper
block were both strictly smaller than the corresponding base dimensions
of the lower block because there has to be some space for the monkey to
step on. This meant, for example, that blocks oriented to have
equal-sized bases couldn't be stacked.
Your job is to write a program that determines the height of the tallest tower the monkey can build with a given set of blocks.
representing the number of different blocks in the following data set. The maximum value for n is 30.
Each of the next n lines contains three integers representing the values xi, yi and zi.
Input is terminated by a value of zero (0) for n.
each test case, print one line containing the case number (they are
numbered sequentially starting from 1) and the height of the tallest
possible tower in the format "Case case: maximum height = height".
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct T
{
int x,y,z;
}c[];
int cmp(T a,T b)
{
if(a.x<b.x)
return ;
if(a.x==b.x && a.y<b.y)
return ;
return ;
}
int main()
{
int i,j,n,t,max,a[],k=,opt[];
while(cin>>t && t)
{j=;n=*t;max=;
memset(opt,,sizeof(opt));
while(t--)
{
for(i=;i<;i++)
cin>>a[i];
sort(a,a+);//如果不进行排序,下面就会有六种可能了,
c[j].x=a[];c[j].y=a[];c[j].z=a[];j++;//a[2]>a[1]>a[0]
c[j].x=a[];c[j].y=a[];c[j].z=a[];j++;//所以长始终大于或等于宽
c[j].x=a[];c[j].y=a[];c[j].z=a[];j++;//这样就减少了三种情况
}
sort(c,c+n,cmp);//先按长进行排序,然后对宽进行排序
for(i=;i<n;i++)
{opt[i]=c[i].z;
for(j=;j<i;j++)
{
if(c[i].x>c[j].x && c[i].y>c[j].y && opt[j]+c[i].z>opt[i])//状态转移,选了就加上;
opt[i]=opt[j]+c[i].z;
}
// cout<<"opt="<<opt[i]<<endl;
}
for(i=;i<n;i++)
if(opt[i]>max)
max=opt[i];
k++;
cout<<"Case "<<k<<": maximum height = "<<max<<endl;
}
return ;
}
hdoj1069 Monkey and Banana的更多相关文章
- hdoj1069 Monkey and Banana(DP--LIS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 思路: 由题意,显然一种block可能有6种形式,且一种形式最多使用一次,因此最多有30×6=1 ...
- hdu 1069 Monkey and Banana
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 杭电oj 1069 Monkey and Banana 最长递增子序列
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 1069 Monkey and Banana(二维偏序LIS的应用)
---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- ACM-经典DP之Monkey and Banana——hdu1069
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- HDU 1069 Monkey and Banana (DP)
Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 1069 Monkey and Banana(动态规划)
Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...
- Monkey and Banana(HDU 1069 动态规划)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- ZOJ 1093 Monkey and Banana (LIS)解题报告
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
随机推荐
- UNIX网络编程读书笔记:辅助数据
辅助数据(ancillary data)可通过调用sendmsg和recvmsg这两个函数,使用msghdr结构中的msg_control和msg_controllen这两个成员发送和接收. 辅助数据 ...
- kafka delete topic
Don't think it is supported yet. Take a look at this JIRA tracking Delete Topic. For delete manually ...
- STL 源代码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie partial_sort / partial_sort_copy ------------- ...
- MySQL中int(5) 中的5代表什么意思?
对于INT型,MySQL支持指定显示宽度例如:int(5):表示如果数值宽度小于5位,则填满宽度,保证总宽度为5位.默认为int(11),配合zerofill可以看到效果. DROP TABLE IF ...
- js replace 如何替换字符串中的最后一个匹配项
1.正则表达时,贪婪模式,.*会一直匹配到最后一个 // 验证 let str = "123[空]345[空]789[空]0"; let res = str.replace(/(. ...
- 如何解决Cydia提示错误
删除/etc/apt/sources.list.d该目录下的cydia.list进入var/lib/apt/lists删掉此文件夹下的所有文件,以及partial下的文件,但须保留这个空文件夹.进入/ ...
- openerp 7.0 来自外部的邮件会发送二次问题解决方法
插入代码:\addons\mail\mail_mail.py #309 line this = self.pool.get('res.users').browse(cr, uid, uid, cont ...
- OpenERP 负载平衡
OpenERP 7.0 带来了许多新特性,架构上也有许多改进.其中可配置 worker 参数,可使 OpenERP 运行在多进程模式,突破GIL的限制,有效利用了现代多核CPU的性能.但默认情况下,O ...
- Knockout自定义绑定my97datepicker
/* my97datepicker 时间格式'yyyy-MM-dd HH-mm-ss' */ ko.bindingHandlers.datetimes = { init: function (elem ...
- topas解析(AIX)
topas解析 topas 的显示信息和解析 (1) topas monitor for host:localhost topas监控的主机名称localhost tue Aug 14 14:1 ...