hdu 1069 Monkey and Banana

时间:2023-01-23 12:36:42

Monkey and Banana

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12865    Accepted Submission(s): 6757

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 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.

 
Input
The input file will contain one or more test cases. The first line of each test case contains an integer n,
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.
 
Output
For 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".
 
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
 
Source
 
Recommend
 
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn = *;
int num=;
struct Node
{
int len,wid;
int hei;
} rect[maxn];
int dp[maxn];
void add(int t[],int sta)
{
if(sta==)
{
rect[num].len=max(t[],t[]);
rect[num].wid= min(t[],t[]);
rect[num].hei=t[];
num++;
return;
}
if(sta==)
{
rect[num].len=max(t[],t[]);
rect[num].wid= min(t[],t[]);
rect[num].hei=t[];
num++;
return;
}
rect[num].len=max(t[],t[]);
rect[num].wid= min(t[],t[]);
rect[num].hei=t[];
num++; }
bool cmp(Node a,Node b)
{
if(a.len!=b.len) return a.len<b.len;
if(a.wid!=b.wid) return a.wid<b.wid;
return a.hei>b.hei;
}
int main()
{
int n;
int cas=;
while(~scanf("%d",&n)&&n)
{
num=;
for(int i=;i<n;i++)
{
int t[];
for(int k=;k<;k++) scanf("%d",t+k);
for(int k=;k<;k++) add(t,k);
}
int maxx = -;
sort(rect,rect+num,cmp);
for(int i=;i<num;i++) dp[i]=rect[i].hei;
for(int i=;i<num;i++)
{
for(int j=i-;j>=;j--)
{
if(rect[i].len>rect[j].len&&rect[i].wid>rect[j].wid)
{
dp[i]=max(dp[i],dp[j]+rect[i].hei);
}
}
maxx=max(dp[i],maxx);
}
printf("Case %d: maximum height = %d\n",cas++,maxx);
}
return ; }

dp[i]表示 以i为最下面的箱子,可以得到的最大高度。

在判断第i的时候,由于箱子已经按照 base dimensions (也就是长和宽)从小到大递增,所以只能把第i个箱子放在前i-1个箱子的某一个下面

(这里便是dp数组循环所做的事情)

这样,从第一个箱子(以为第一个箱子上面不肯能在放其他的箱子,所以我们直接从第二个箱子开始)循环,每次记录最大值,

最后按照样例格式输出即可。

hdu 1069 Monkey and Banana的更多相关文章

  1. HDU 1069 Monkey and Banana &sol; ZOJ 1093 Monkey and Banana (最长路径)

    HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径) Description A group of researchers ar ...

  2. HDU 1069 Monkey and Banana dp 题解

    HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...

  3. HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java ...

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

    ---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  5. HDU 1069 Monkey and Banana &lpar;DP&rpar;

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  6. HDU 1069—— Monkey and Banana——————【dp】

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  7. HDU 1069 Monkey and Banana(动态规划)

    Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...

  8. HDU 1069 Monkey and Banana&lpar;DP 长方体堆放问题&rpar;

    Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...

  9. HDU 1069 Monkey and Banana 基础DP

    题目链接:Monkey and Banana 大意:给出n种箱子的长宽高.每种不限个数.可以堆叠.询问可以达到的最高高度是多少. 要求两个箱子堆叠的时候叠加的面.上面的面的两维长度都严格小于下面的. ...

随机推荐

  1. UITableView 委托方法总结

    http://blog.sina.com.cn/s/blog_7b9d64af01019x3t.html   总结: UITableViewDelegate row: heightForRow hea ...

  2. mysqlroot passwd

    grant all on *.* to 'root'@'192.168.0.%' identified by 'bloablabar'; 更改用户密码: update user set passwor ...

  3. nodejs的mysql模块学习&lpar;五&rpar;数据库连接配置之SSL

    SSL选项 在SSL连接选项中需要一个字符串 或者对象 当是字符串的时候 将使用预定义的SSL配置文件 "Amazon RDS" 只有这一个预定义配置文件 用来连接到亚马逊RDS服 ...

  4. lintcode :Reverse Words in a String 翻转字符串

    题目: 翻转字符串 给定一个字符串,逐个翻转字符串中的每个单词. 样例 给出s = "the sky is blue",返回"blue is sky the" ...

  5. 【转载】shell中的特殊变量&dollar;

    shell中的特殊变量:变量名含义$0shell或shell脚本的名字$*以一对双引号给出参数列表$@将各个参数分别加双引号返回$#参数的个数$_代表上一个命令的最后一个参数$$代表所在命令的PID$ ...

  6. CodeForces-748C

    这题就是确定一个点,然后去找能够实现最短距离的点且距离最远的点,因为题目要求点最少.在查找时,如果从最后的点开始枚举,找到的第一个满足距离最短的点一定是最远点,但是查找的复杂度是O(n),共有n次查找 ...

  7. C&num; 算法系列一基本数据结构

    一.简介 作为一个程序员,算法是一个永远都绕不过去的话题,虽然在大学里参加过ACM的比赛,没记错的话,浙江赛区倒数第二,后来不知怎么的,就不在Care他了,但是现在后悔了,非常的后悔!!!如果当时好好 ...

  8. &lbrack;Java&rsqb;接受拖拽文件的窗口

    至于这个问题,Java的awt.dnd包下提供了许多完成这一功能的类 例如DropTarget.DropTargetListener等 先来讲一下DropTarget类,这个类完成和拖拽.复制文件等操 ...

  9. mysql 库和表占用空间查询

    1. 查看该数据库实例下所有库大小,得到的结果是以MB为单位 as sum from information_schema.tables; 2.查看该实例下各个库大小 as total_mb, as ...

  10. Linux管道及I&sol;O重定向

    I/O: 系统设定 默认输入设备:标准输入,STDIN,0 默认输出设备:标准输出,STDOUT,1 标准错误输出:STDERR,2 属于不同的数据流 标准输入:键盘 标准输出和错误输出:显示器 I/ ...