Monkey and Banana

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

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


Sample Output

Case : maximum height =
Case : maximum height =
Case : maximum height =
Case : maximum height =

题目大意

给出一些长方体的规格,每种长方体都有无限个,问利用这些长方体(长宽高可以转换),下层的长和宽都比上层的大,最多能堆多高

题目分析

虽说是无限多个,但是由于长和高堆起来都不能相等,所以一个规格的长方体最多能用6个(长宽高的不同排列),这样就将题目转化成了一个有限的木块的题目。

首先将木块按照x值与y值从大到小排序,用dp[i]来记录i为最顶端木块时,所能达到的最大高度。

由于我们已经将木块排好序了,那么处理到 i 木块时,能在这个木块底下的就只有 [0, i-1] 这些木块,所以用一个 j 从0循环到 i-1:

如果i的x和y小于j的x和y,那么dp[i]显然等于:max ( dp[j] + a[i].h , dp[i] )

求出dp[i]时,要注意更新结果。

代码

#include <bits/stdc++.h>  

using namespace std; 

typedef struct
{
int x;
int y;
int h;
}node;
node a[]; int i,n,num,x,y,z,t=,anss,dp[],j; bool cmp (node a,node b)
{
if(a.x>b.x)
return ;
else if(a.x==b.x&&a.y>b.y)
return ;
else return ;
} int main()
{
while(scanf("%d",&n),n!=)
{
t++;
memset(a,,sizeof(a));
num=;
for(i=;i<=n;i++)
{
scanf("%d %d %d",&x,&y,&z);
//cout<<x<<y<<z;
a[num].x=x,a[num].y=y,a[num].h=z;
num++;
a[num].x=y,a[num].y=x,a[num].h=z;
num++;
a[num].x=z,a[num].y=x,a[num].h=y;
num++;
a[num].x=z,a[num].y=y,a[num].h=x;
num++;
a[num].x=x,a[num].y=z,a[num].h=y;
num++;
a[num].x=y,a[num].y=z,a[num].h=x;
num++;
}
sort(a,a+num,cmp);
anss=;
memset(dp,,sizeof(dp));
for(i=;i<num;i++)
dp[i]=a[i].h;
for(i=;i<num;i++)
{
for(j=;j<i;j++)
{
if(a[i].x<a[j].x&&a[i].y<a[j].y)
dp[i]=max(dp[j]+a[i].h,dp[i]);
}
if(dp[i]>anss)
anss=dp[i];
}
printf("Case %d: maximum height = %d\n",t,anss);
}
}

HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)的更多相关文章

  1. HDU 1069 Monkey and Banana dp 题解

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

  2. HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径)

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

  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(动态规划)

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

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

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

  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——————【dp】

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

  8. HDU 1069 Monkey and Banana 基础DP

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

  9. hdu 1069 Monkey and Banana

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. 【LOJ2316】「NOIP2017」逛公园

    [题目链接] [点击打开链接] [题目概括] 对给定\(K\),起点\(1\)到终点\(n\)中对长度为\([L,L+K]\)的路径计数. \(L\)为\(1\)到\(n\)的最短路长度. [思路要点 ...

  2. Python实用黑科技——找出序列里面出现次数最多的元素

    需求: 如何从一个序列中快速获取出现次数最多的元素. 方法: 利用collections.Counter类可以解决这个问题,特别是他的most_common()方法更是处理此问题的最快途径.比如,现在 ...

  3. Postman(一)、断言

    postman常见断言方法介绍: 1.Clear a global variable (清除一个全局变量)  postman.clearGlobalVariable("variable_ke ...

  4. POJ3233 [C - Matrix Power Series] 矩阵乘法

    解题思路 题目里要求\(\sum_{i=1}^kA^i\),我们不妨再加上一个单位矩阵,求\(\sum_{i=0}^kA^i\).然后我们发现这个式子可以写成这样的形式:\(A(A(A...)+E)+ ...

  5. kafka offset存储

    存储方式 方式 方式来源 存储位置 自动提交 kafka kafka 异步提交 kafka kafka checkpoint spark streaming hdfs hbase存储 程序开发 hba ...

  6. 【转】diamond专题(三)—— diamond架构

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  7. 第五次实验报告&学习总结

    一.实验目的 (1) 理解抽象类与接口的使用; (2)了 解包的作用,掌握包的设计方法. 二.实验要求 (1)掌 握使用抽象类的方法. (2)掌 握使用系统接口的技术和创建自定义接口的方法. (3) ...

  8. LeetCode 14. 最长公共前缀(Longest Common Prefix)

    题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...

  9. express node 框架介绍

    开篇先声明一个重点: 就是论文件模块的重要性,之前我一直以为 fs 模块不重要,后来遇到了问题,才发现我之前的自以为是是多么愚蠢的一件事,我现在知道了 fs 模块的重要性 fs 模块:用于对文件的操作 ...

  10. Win7、win8、win10下实现精准截获Explorer拷贝行为

    介绍了windows下对Explorer的拷贝动作的精确截获,这个在企业数据安全dlp产品系列中减少审计的噪音很有效,方便运营人员做针对性的审计. 在企业数据安全中我通常需要监测用户的拷贝行为,特别像 ...