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= ...
随机推荐
- Asp.Net MVC:return View()、return View("Login")、return Login()、return RedirectToAction("Login") 的区别
在做登录页面的时候发现的一些情况: ------------------------------------------------------------------------- public A ...
- vue 钩子函数 使用async await
示例: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <tit ...
- git查看各个branch之间的关系图
两种方法: 一. 使用Git log命令 git log --graph --decorate --oneline --simplify-by-decoration --all 说明: --deco ...
- Eclipse 批量创建多级文件夹
Eclipse 批量创建多级文件夹 CreateTime--2018年3月8日08:23:24 Author:Marydon 1.选中要建立文件夹的父级目录-->右键-->New--& ...
- ls -lrt
1,按照时间升序 命令:ls -lrt 详细解释: -l use a long listing format 以长列表方式显示(详细信息方式) -t sort by modification time ...
- C#:Use Form as Subform
static class SubFormExtensions { internal static bool AttachTo(this Form subForm, Panel panel) { if ...
- ie上画圆饼图
概述 主要运用到CSS3的transform.js.jq实现饼状图效果 详细 代码下载:http://www.demodashi.com/demo/10579.html 一.准备工作 1.主要运用到C ...
- 使用EditPlus技巧,提高工作效率(附英文版、自动完成文件、语法文件下载)
http://www.cnblogs.com/JustinYoung/archive/2008/01/14/editplus-skills.html
- 微信小程序四(设置底部导航)
好了 小程序的头部标题 设置好了,我们来说说底部导航栏是如何实现的. 我们先来看个效果图 这里,我们添加了三个导航图标,因为我们有三个页面,微信小程序最多能加5个. 那他们是怎么出现怎么着色的呢?两步 ...
- Device trees, Overlays and Parameters of Raspberry Pi
Raspberry Pi's latest kernels and firmware, including Raspbian and NOOBS releases, now by default us ...