题目链接: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. java web 程序---缓冲代码

    在写验证码的时候,我的验证码是随机的,所以每次点击时,刷新页面,验证码都会改变. 可是,当我点击刷新时,验证码不变,说明,没有缓冲. 这里差三行代码. response.setHeader(" ...

  2. 求交错序列前N项和(15 分)

    7-2 求交错序列前N项和(15 分) 本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在 ...

  3. 制作jQuery文字提示插件

    (functions($){ $.fn.colorTip=function(settings){ var defaultSettings={ color:'yellow', timeout:500 } ...

  4. LVM逻辑卷创建管理

    首先添加三块硬盘 结构关系图 相关命令 查看磁盘 #fdisk -l 分区 #fdisk /dev/sda/ #n新建 ProMary主分区 extended扩展分区 #p查看 #q不保存退出 #w保 ...

  5. jquery的相关应用

    1.jQuery获取鼠标事件源(万能) 1 //任意位置 2 3 $(document).ready(function(){ 4 5 $(document).click(function(){ 6 $ ...

  6. Java与C++语法的区别

    1. 注释可以在Java程序中起到文档标记的作用 类文档标记: 1)@version 2)@author 3)@param 4)@return 5)@exception 2. Java的字符占两个字节 ...

  7. OpenGL chapter2

    opengl: 图形硬件的一种软件接口:最大的优点:它的速度快于光线追踪器或软件渲染引擎. GLUT: AUX是OpenGL辅助函数库. 数据类型: GLboolean 位宽:1 GLbyte 8 G ...

  8. solr入门之权重排序方法初探之使用edismax改变权重

    做搜索引擎避免不了排序问题,当排序没有要求时,solr有自己的排序打分机制及sorce字段 1.无特殊排序要求时,根据查询相关度来进行排序(solr自身规则) 2.当涉及到一个字段来进行相关度排序时, ...

  9. Vuex以及axios 看这个

      vuex  -- 安装   npm i vuex  -- 配置   -- 导入vuex      import vuex from "vuex"   -- vue使用vuex  ...

  10. QT按键(Qbutton)改变颜色

    第一种是按键上面的字颜色的改变:   ui->motor1->setStyleSheet("color: red"); 效果: 第二种是背景改变: ui->mot ...