题目链接: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. Python单例模式的4种实现方法

    #-*- encoding=utf-8 -*- print '----------------------方法1--------------------------' #方法1,实现__new__方法 ...

  2. Microsoft Dynamics CRM 2011 安装完全教程

    作者:卞功鑫,转载请保留.http://www.cnblogs.com/BinBinGo/p/4302612.html 环境介绍 WINDOWS 2008 R2 Datacenter Microsof ...

  3. python_基础算法

    本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序,计数排序.希望大家回顾知识的时候也能从我的这篇文章得到帮助. 概述 十种常见排序算法可以分为两 ...

  4. C编程常错项

    linux系统下C编程一般报错;1,使用sqrt开平方函数未定义,是因为math.h[库,头文件未包含]2,隐式申明与内建函数"XXXX"不兼容;上述问题所在,一般是因为使用exi ...

  5. ASCII和万国码

    ASCII和万国码 什么是ASCII 计算机的起初是使用内存中的0101来表示数和机器码.如何用内存中的bit来表示文本一直困扰着人们,毕竟人类主要的信息展示是文字,而不是苦涩的0101.后来ASCI ...

  6. sqlserver导入导出数据库结构及创建用户分配权限

    1.创建用户分配权限 https://www.cnblogs.com/jennyjiang-00/p/5803140.html 2.sqlserver2008导出表结构和表数据 导出表结构   htt ...

  7. leetcode349

    public class Solution { public int[] Intersection(int[] nums1, int[] nums2) { var list1 = nums1.ToLi ...

  8. git-采集编码搜索

    https://github.com/search?utf8=%E2%9C%93&q=%E9%87%87%E9%9B%86%E7%BC%96%E7%A0%81&type= https: ...

  9. Python library not found: libpython2.7mu.so.1.0

    在使用pyinstaller生成python可执行文件的时候,包错误,提示有几个依赖的库找不到:Python library not found: libpython2.7mu.so.1.0 参考st ...

  10. Nginx主动检测方案---Tengine

    方案选择大致如下: 1.用Tengine来代替Nginx,   http://tengine.taobao.org/ Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问 ...