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

题意:给定n种类型的长方体,每个类型长方体无数个,要求长方体叠放在一起,且上面的长方体接触面积要小于下面,长宽也小于下面的长方体,求最高能叠放多高?

思路:首先每个长方体有三种情况可以作为底部,那么一共是3*n种类型的长方体,首先按长宽的大小排序,然后dp。dp[i]表示以第i块长方体为顶的最大高度,那么转移方程就是dp[i] = max(dp[i],dp[j] +  g[i]. h),形似一个LIS的dp,枚举 j 即可

AC代码:

 #include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
#include<unordered_map>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = ;
int dp[maxn];
struct node{
int x,y,z;
}g[maxn];//设z为高度 ,x,y分别为长和宽
bool cmp(node a,node b){
if(a.x == b.x ) return a.y > b.y ;
return a.x > b.x ;
}
int m,n;
int main(){
int cnt = ;
while(scanf("%d",&n)){
if(n == ) break;
memset(dp,,sizeof(dp));
for(int i = ;i<=*n;i+=){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
g[i].x = x<y? x:y;
g[i].y = y>x? y:x;
g[i].z = z;
g[i+].x = x<z? x:z;
g[i+].y = z>x? z:x;
g[i+].z = y;
g[i+].x = y<z? y:z;
g[i+].y = z>y? z:y;
g[i+].z = x;
}
sort(g+,g++*n,cmp);
for(int i = ;i<=*n;i++) dp[i] = g[i].z ;
int ans = dp[];
for(int i = ;i<=*n;i++){
for(int j = ;j<i;j++){
if(g[j].x > g[i].x && g[j].y > g[i].y ){
dp[i] = max(dp[i],dp[j]+g[i].z );//形似一个LIS的dp
ans = max(ans,dp[i]);
}
}
}
printf("Case %d: maximum height = %d\n",cnt,ans);
cnt++;
}
return ;
}

HDU1069 Monkey and Banana(dp)的更多相关文章

  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. HDU 1069 Monkey and Banana ——(DP)

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

  4. ZOJ 1093 Monkey and Banana (LIS)解题报告

    ZOJ  1093   Monkey and Banana  (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  5. HDU 1069 Monkey and Banana(动态规划)

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

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

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

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

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

  8. 随手练——ZOJ 1093 Monkey and Banana(动态规划)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93 一堆科学家研究猩猩的智商,给他M种长方体,每种N个. 然后,将一个 ...

  9. hdoj1069 Monkey and Banana(DP--LIS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 思路: 由题意,显然一种block可能有6种形式,且一种形式最多使用一次,因此最多有30×6=1 ...

随机推荐

  1. 在Docker中部署Confluence和jira-software

    -------谢谢您的参考,如有疑问,欢迎交流 version: centos==7.2 jdk==1.8 confluence==6.15.4 jira-software==8.2.1 docker ...

  2. idea插件不兼容问题

    https://plugins.jetbrains.com/ 找对应版本的插件

  3. How Many Tables HDU - 1213

    #include<iostream> using namespace std; ; int p[N]; int find(int x) { if(p[x]!=x) p[x]=find(p[ ...

  4. 关于Windows系统下端口被占用的问题和task命令

    一.如何解决端口被占用的问题? 此时端口4444被进程占用,只要找到端口4444的进程,并且将进程kill掉即可. 开始--运行--cmd 进入命令提示符 输入netstat -aon 即可看到所有连 ...

  5. npx是什么

    npx是一个执行npm软件包的二进制文件,通俗的讲,他可以执行npm的一些指令 在npm>5.2.0 的时候npm里面就集成了npx 比如npx webpack 他会执行node_modules ...

  6. 数位dp(模板+例题)

    文章参考:数位dp之总结 首先,什么是数位dp?它是干什么的? 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数. 举个栗子: 加入我们要枚举所有上界不超过231 ...

  7. 原生JS操作class 极致版

    // 获取class function getClass(el) { return el.getAttribute('class') } // 设置class function setClass(el ...

  8. Dubbo的SPI机制与JDK机制的不同及原理分析

    从今天开始,将会逐步介绍关于DUbbo的有关知识.首先先简单介绍一下DUbbo的整体概述. 概述 Dubbo是SOA(面向服务架构)服务治理方案的核心框架.用于分布式调用,其重点在于分布式的治理. 简 ...

  9. JavaScript-事件类型

    DOM3事件类型: 1.UI事件:当用户与页面上的元素交互时触发 a.DOMActivate:元素已经被用户操作激活. b.load:(1)页面完全加载:window触发. (2)所有框架加载完毕:框 ...

  10. mysql 服务

    1.以管理员身份运行cmd:C:\Windows\System32\cmd.exe  右键以管理员身份运行 2.“具体路径” --install   “D:\programme installatio ...