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= ...
随机推荐
- maven org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60
maven org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant poo ...
- 〖Ruby〗Ruby关键字
模块定义:module 类定义:class 方法定义:def, undef 检查类型:defined? 条件语句:if, then, else, elsif, case, when, unless 循 ...
- Knockout自定义绑定my97datepicker
/* my97datepicker 时间格式'yyyy-MM-dd HH-mm-ss' */ ko.bindingHandlers.datetimes = { init: function (elem ...
- servlet ServletConfig ServletContext
ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...
- 微信小程序条码、二维码生成模块
代码地址如下:http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- Spring mvc中@RequestMapping 6个基本用法小结
Spring mvc中@RequestMapping 6个基本用法小结 小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMa ...
- 职业-把工作当作职业 or 事业?
有这么一种说法,工作态度可以分为两种:一种是把工作当作职业,另一种是把工作当成事业.态度折射品质,态度影响成败. 把工作当作一份职业的人,以职业交换薪水,完全是为工作而工作,工作是为了糊口养家,上班是 ...
- jquery 事件小事例
用户名变灰 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> & ...
- Python 绘图库的使用:matplotlib
Matplotlib 官方API地址:https://matplotlib.org/ 例子: import matplotlib.pyplot as plt num_list=[1.5,0.6,7.8 ...
- iOS - AsyncSocket 的使用
1.AsyncSocket 基于 CFSocket.GCD 进行的封装(OC). 支持 TCP 和 UDP. 完整的回调函数(用于处理各种回调事件,连接成功,断开连接,收到数据等). 需要注意的问题: ...