这道题是典型的dp题。首先是数据的处理上,因为每个长方体的3条不同长度的棱都可以作为高,因此一个长方体可以看成3个不同的长方体。从而将数据扩展为3*n,然后将所有的长方体以长度为第一排序条件,宽度为第二排序条件进行排序。接着整个问题就变成了求最长递减子序列的问题了,多得到的状态方程为:dp[i]=max{dp[i],dp[j]+blocks[i].z}.其中dp[i]是以第i块木块为最顶上的木块时多得到的最大高度,即最优子结构。最后找到最最优的子结构即为本题的最大高度。

 #include"iostream"
#include"stdio.h"
#include"algorithm"
#include"string.h"
#include"cmath"
#include"queue"
#define mx 1005
using namespace std;
struct node
{
int x,y,z;
}blocks[mx];
int n,dp[mx];
bool cmp(const node a,const node b) //以长为第一要求,宽为第二要求进行排序
{
if(a.y!=b.y) return a.y>b.y;
else return a.x>b.x;
}
int main()
{
int count1=;
while(cin>>n,n)
{
count1++;
int i,j,k;
for(j=,i=;i<n;i++) //将一个木块变成3个
{
int a,b,c;
cin>>a>>b>>c;
blocks[j].x=min(a,b);
blocks[j].y=max(a,b);
blocks[j++].z=c;
blocks[j].x=min(a,c);
blocks[j].y=max(a,c);
blocks[j++].z=b;
blocks[j].x=min(b,c);
blocks[j].y=max(b,c);
blocks[j++].z=a;
}
k=j;
sort(blocks,blocks+k,cmp);//排序
int maxhigh=;//记录最长上升子序列的长度
for(i=;i<k;i++)
{
dp[i]=blocks[i].z;//对dp[]进行初始化
for(j=;j<i;j++)
{
if(blocks[j].x>blocks[i].x&&blocks[j].y>blocks[i].y&&dp[j]+blocks[i].z>dp[i])//判断条件缺一不可
{
dp[i]=dp[j]+blocks[i].z;
}
}
if(dp[i]>maxhigh) maxhigh=dp[i];
}
cout<<"Case "<<count1<<": maximum height = "<<maxhigh<<endl;
}
return ;
}

hdu-acm steps Monkey and Banana的更多相关文章

  1. HDU 1069:Monkey and Banana(DP)

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

  2. 【HDU - 1069】 Monkey and Banana (基础dp)

    Monkey and Banana 直接写中文了 Problem Statement 一组研究人员正在设计一项实验,以测试猴子的智商.他们将挂香蕉在建筑物的屋顶,同时,提供一些砖块给这些猴子.如果猴子 ...

  3. HDU 1069---背包---Monkey and Banana

    HDU 1069 Description A group of researchers are designing an experiment to test the IQ of a monkey. ...

  4. hdu acm steps Big Event in HDU

    上网搜了一下这道题的解法,主要有两个方法,一种是采用母函数的方法,一种是采用0/1背包的方法. 先说一下母函数,即生成函数,做个比喻,母函数就是一个多项式前面的系数的一个整体的集合,而子函数就是这个多 ...

  5. hdu ACM Steps Section 1 花式A+B 输入输出格式

    acm与oi很大的一个不同就是在输入格式上.oi往往是单组数据,而acm往往是多组数据,而且题目对数据格式往往各有要求,这8道a+b(吐槽..)涉及到了大量的常用的输入输出格式.https://wen ...

  6. hdu 1069 (DP) Monkey and Banana

    题目:这里 题意: Description 一组研究人员正在设计一项实验,以测试猴子的智商.他们将挂香蕉在建筑物的屋顶,同时,提供一些砖块给这些猴子.如果猴子足够聪明,它应当能够通过合理的放置一些砖块 ...

  7. (最大上升子序列)Monkey and Banana -- hdu -- 1069

    http://acm.hdu.edu.cn/showproblem.php?pid=1069      Monkey and Banana Time Limit:1000MS     Memory L ...

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

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

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

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

随机推荐

  1. Android 向Application对象添加Activity监听

    可以建立对象把Application.ActivityLifecycleCallbacks接口中的函数实现,并利用public void registerActivityLifecycleCallba ...

  2. mybatis前台传给带年月日时分秒的数据给后台,后台接收不到时分秒

    框架spring+springMVC+mybatis, 前台给后台传数据传不了时分秒,所以用springMVC的注解解决了,记录一下 controller中如下: /** * * 方法描述 : 使用@ ...

  3. mongodb初步使用

    下载安装: 下载MongoDB:http://www.mongodb.org/. 安装MongoDB:傻瓜式安装 配置: 把bin目录添加到系统环境变量 启动: 打开一个 cmd编辑框,输入: mon ...

  4. sublime快捷键整理

    快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t 重新打开最近关闭文件 ctrl+n 新建文件 c ...

  5. java 格式化时间

    java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); form ...

  6. javascript中json解密

    一直以前都会断断续续会碰到js中的json数据的解析,下面凭着自己的经验,简单的讲解一下在js中的json的几种解析方法.  一.jquery的方式 首先你得先得到数据,一般都是jquery的ajax ...

  7. 在竞赛ACM Java处理输入输出

    一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非 ...

  8. Solr常用查询语法笔记

    1.常用查询 q - 查询字符串,这个是必须的.如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京) fq - (filter query)过虑查询,作用:在q查询符 ...

  9. linux tricks 之数据对齐。

    转载:http://blog.chinaunix.net/uid-20608849-id-3027953.html   内核为了保持最大的兼容性和代码灵活性,不可能直接对某个数据类型定义它的大小范围. ...

  10. VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性

    转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...