题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069

思路:

由题意,显然一种block可能有6种形式,且一种形式最多使用一次,因此最多有30×6=180个block。然后先按长进行排序,若长相同,则按宽进行排序。这样排序之后整个问题就变成了求这个排列的上升子序列的最高值,就转变成求LIS。由于数据量小,用经典的O(n^2)LIS算法即可(关于LIS算法可以见我的另一片随笔:https://www.cnblogs.com/FrankChen831X/p/10384238.html),由于最长的上升子序列的高度不一定是最大的,所以LIS的O(nlogn0算法不能用。详见代码,代码中f[i]表示以i结尾的最高的上升子序列的高度值。做这道题被一个小错误硬生生卡了5个小时,卡到怀疑人生,就是我在初始化b[k]的同时初始化f[k],这样排序之后与原来的不匹配了,欸,这么小的错误找了半天,只能吸取教训了。

 #include<bits/stdc++.h>
using namespace std; struct block{
int x,y,z;
}b[]; bool cmp(block aa,block bb){
if(aa.x<bb.x) return ;
else if(aa.x==bb.x&&aa.y<bb.y) return ;
else return ;
} int n,x,y,z,cas=,f[]; int main(){
while(scanf("%d",&n)!=EOF&&n){
int k=,res=;
while(n--){
scanf("%d%d%d",&x,&y,&z);
b[k].x=x;b[k].y=y;b[k].z=z;k++;
b[k].x=x;b[k].y=z;b[k].z=y;k++;
b[k].x=y;b[k].y=x;b[k].z=z;k++;
b[k].x=y;b[k].y=z;b[k].z=x;k++;
b[k].x=z;b[k].y=x;b[k].z=y;k++;
b[k].x=z;b[k].y=y;b[k].z=x;k++;
}
sort(b,b+k,cmp);
for(int i=;i<k;i++){
f[i]=b[i].z;
for(int j=;j<i;j++)
if(b[j].x<b[i].x&&b[j].y<b[i].y)
f[i]=max(f[i],f[j]+b[i].z);
if(f[i]>res) res=f[i];
}
printf("Case %d: maximum height = %d\n",cas++,res);
}
return ;
}

hdoj1069 Monkey and Banana(DP--LIS)的更多相关文章

  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)

    题目链接 Problem Description A group of researchers are designing an experiment to test the IQ of a monk ...

  3. Monkey and Banana(dp,求最长的下降子序列)

    A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a bana ...

  4. HDU 1069 Monkey and Banana ——(DP)

    简单DP. 题意:给出若干种长方体,如果摆放时一个长方体的长和宽小于另一个的长宽,那么它可以放在另一个的上面,问最高能放多少高度.每种长方体的个数都是无限的. 做法:因为每种个数都是无限,那么每种按照 ...

  5. HDU1069 Monkey and Banana(dp)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:给定n种类型的长方体,每个类型长方体无数个,要求长方体叠放在一起,且上面的长方体接触面积要小于 ...

  6. HDU 1069 Monkey and Banana(DP——最大递减子序列)

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=1069 题意描述: 给n块砖,给出其长,宽和高 问将这n块砖,怎样叠放使得满足以下条件使得 ...

  7. codeforces 340D Bubble Sort Graph(dp,LIS)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud  Bubble Sort Graph Iahub recently has lea ...

  8. HDU 1087 Super Jumping! Jumping! Jumping! (DP+LIS)

    题意:给定一个长度为n的序列,让你求一个和最大递增序列. 析:一看,是不是很像LIS啊,这基本就是一样的,只不过改一下而已,d(i)表示前i个数中,最大的和并且是递增的, 如果 d(j) + a[i] ...

  9. hdu 1069 Monkey and Banana(记忆搜)

    题意: N(不超过30)种木块,每种木块有长.宽.高x,y,z. 木块A可以搭在木块B上当且仅当A的底面长和宽都分别小于B的顶面的长与宽,即不能有超出B的部分. 问垒起来的"木块塔" ...

随机推荐

  1. 术语-服务:BaaS

    ylbtech-术语-服务:BaaS BaaS(后端即服务:Backend as a Service)公司为移动应用开发者提供整合云后端的边界服务. 1.返回顶部 1. 中文名:后端即服务 外文名:B ...

  2. Linux性能分析 vmstat输出

    vmstat输出     1.linux系统下vmstat输出   vmstat的输出分为以下几种模式:   (1).VM MODE (普通选项) (2).DISK MODE(-d选项) (3).DI ...

  3. [UE4]Acotr

    任何能被放在关卡中的对象都是Actor Tick是每帧都会调用的事件

  4. javascript节点操作移出节点removeChild()

    removeChild(a)是用来删除文档中的已有元素 参数a:要移出的节点 <div id="guoDiv"> <span>1</span> ...

  5. ZooKeeper系列(2) 安装部署 (转)

    原文地址:http://www.cnblogs.com/wuxl360/p/5817489.html 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模 ...

  6. 腾讯优图联手Science发布主题报告:计算机视觉的研发和应用

    近日,腾讯优图与<科学>(Science)杂志共同发布<Seeing is believing: R&D applications of computer vision> ...

  7. java开发-问题清单

    本人是做Java开发的,这是我参加58,搜狐,搜狗,新浪微博,百度,腾讯文学,网易以及其他一些小的创业型公司的面试常被问的问题,当然有重复,弄清楚这些 1. junit用法,before,before ...

  8. foreach的使用

    //foreach循环语句,常用来遍历数组,一般有两种使用方法:不取下标,取下标 //不取下表 foreach(数组 as 值) { //执行的程序 echo 值; } //取下标 foreach(数 ...

  9. python you-get 下载视频

    python使用you-get模块下载视频   pip install you-get # 安装先 怎么用    进入命令行: you-get url 暂停下载:ctrl + c ,继续下载重复  y ...

  10. 使MySQL查询区分大小写的实现方法

    发布:mdxy-dxy 字体:[增加 减小] 类型:转载 我们在MySQL中使用SELECT语句查询时,可不可以使查询区分大小写?今天从网络上找到了方法,现总结如下.   1.一种方法是可以设置表或行 ...