hdu1069 dp
题意:有若干种不同规格(长、宽、高)的砖块,每种砖块有无数个,可以自由选择以砖块的哪条边做长、宽或高,用这些砖块搭高塔,要求上面砖块的长宽必须严格小于下面砖块的长宽,问塔最高能有多高
我的做法是每读入一组长宽高,就把它分为三种不同的、长宽高定好的砖块,全部读完之后将这些砖块依次按照长宽高排序,从长宽最大的砖块开始依次求以该砖块为顶的塔最高能有多高:
对于第 i 块砖,我想前寻找第一块长宽均比它大的砖块 j ,进行优化:
dp [ i ] = max ( dp [ i ] , dp [ j ] + p [ i ] . z ) ; p [ i ] . z 就是第 i 块砖的高度。
dp 完之后再遍历一遍寻找最大的高度,当然,其实在 dp 的过程中就可以进行最大值的选取了。
int main(){
int d[],n,c=;
while(scanf("%d",&n)!=EOF&&n!=){
memset(dp,,sizeof(dp));
p[].x=p[].y=0xFFFFFFF;
p[].z=;
int i,j,count=;
for(int q=;q<=n;q++){
scanf("%d%d%d",&d[],&d[],&d[]);
for(i=;i<=;i++){
for(j=i+;j<=;j++){
if(d[i]<d[j]){
int t=d[i];
d[i]=d[j];
d[j]=t;
}
}
}
p[++count].x=d[];
p[count].y=d[];
p[count].z=d[];
p[++count].x=d[];
p[count].y=d[];
p[count].z=d[];
p[++count].x=d[];
p[count].y=d[];
p[count].z=d[];
}
sort(p+,p+count+,cmp);
/* printf("\n");
for(i=1;i<=count;i++){
printf("%d %d %d\n",p[i].x,p[i].y,p[i].z);
}
printf("\n");*/
for(i=;i<=count;i++){
for(j=i-;j>=;j--){
if (p[i].x<p[j].x&&p[i].y<p[j].y){
dp[i]=max(dp[i],dp[j]+p[i].z);
}
}
}
// for(i=1;i<=count;i++)printf("%d %d\n",i,dp[i]);
int ans=;
for(i=;i<=count;i++){
if(dp[i]>ans)ans=dp[i];
}
printf("Case %d: maximum height = %d\n",++c,ans);
}
return ;
}
hdu1069 dp的更多相关文章
- ACM-经典DP之Monkey and Banana——hdu1069
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- HDU1069:Monkey and Banana(DP+贪心)
Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. T ...
- hdu1069(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 分析: 每种石头有六种方法,那么等效为:有6*n种石头. 根据x和y排序(要保证相应的x.y总有 ...
- hdu1069线性dp
/* dp[i]:取第i个方块时最多可以累多高 */ #include<bits/stdc++.h> using namespace std; struct node{ int x,y,z ...
- HDU1069(还是dp基础)
今天不想说太多废话-由于等下要写自己主动提交机. 不知道能不能成功呢? 题目的意思就是,一个猴子,在叠砖头 ...以下的要严格大于上面的.求叠起来最高能到多少- n非常少,n^2算法毫无压力-话说dp ...
- hdu-1069(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:一群猴子,给出n块砖的长x宽y高z,用这些砖拼起的高度最高是多少, 要求底下的砖的长宽都要 ...
- 「暑期训练」「基础DP」 Monkey and Banana (HDU-1069)
题意与分析 给定立方体(个数不限),求最多能堆叠(堆叠要求上方的方块严格小于下方方块)的高度. 表面上个数不限,问题是堆叠的要求决定了每个方块最多可以使用三次.然后就是对3n" role=& ...
- kuangbin专题十二 HDU1069 Monkey and Banana (dp)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU1069 Monkey and Banana —— DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS ...
随机推荐
- 深入理解Java中配置环境变量
深入理解Java中配置环境变量 配置的目的: 本来只在安装JDK的bin目下能运行java.exe,javac.exe,jar.exe,javadoc.exe等Java开发工具包命令,我们现在想让在所 ...
- php 邮件发送利器 PHPMailer
php 自带的邮件发送函数已经弱到不能用了. PHPMailer非常的强大. 绝对是php里必须使用的程序. 下载地址: https://github.com/Synchro/PHPMailer 只要 ...
- Report CodeForces - 631C (栈)
题目链接 题目大意:给定序列, 给定若干操作, 每次操作将$[1,r]$元素升序或降序排列, 求操作完序列 首先可以发现对最后结果有影响的序列$r$一定非增, 并且是升序降序交替的 可以用单调栈维护这 ...
- 『Python』图像金字塔、滑动窗口和非极大值抑制实现
图像金字塔 1.在从cv2.resize中,传入参数时先列后行的 2.使用了python中的生成器,调用时使用for i in pyramid即可 3.scaleFactor是缩放因子,需要保证缩放后 ...
- Linux文件与目录管理(二)
一.处理目录的常用命令 ls:列出目录 cd:切换目录 pwd:显示当前的目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 cp:复制文件或者目录 rm:移除文件或者目录 可以使用ma ...
- OC ARC之循环引用问题(代码分析)
// // main.m // 03-arc-循环引用 // // Created by apple on 13-8-11. // Copyright (c) 2013年 itcast. All ri ...
- SVM学习(五):松弛变量与惩罚因子
https://blog.csdn.net/qll125596718/article/details/6910921 1.松弛变量 现在我们已经把一个本来线性不可分的文本分类问题,通过映射到高维空间而 ...
- PHP:第三章——PHP中控制函数的函数
<pre> <?php header("Content-Type:text/html;charset=utf-8"); /******************** ...
- jsoupa-解析遍历一个HTML
解析个遍历一个HTML文档 String html ="<html><head><title>First parse</title></ ...
- 51nod1079
模板题... 代码: #include <iostream> using namespace std; ],p[]; int main() { int n; while(cin>&g ...