题意:有若干种不同规格(长、宽、高)的砖块,每种砖块有无数个,可以自由选择以砖块的哪条边做长、宽或高,用这些砖块搭高塔,要求上面砖块的长宽必须严格小于下面砖块的长宽,问塔最高能有多高

我的做法是每读入一组长宽高,就把它分为三种不同的、长宽高定好的砖块,全部读完之后将这些砖块依次按照长宽高排序,从长宽最大的砖块开始依次求以该砖块为顶的塔最高能有多高:

对于第 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的更多相关文章

  1. ACM-经典DP之Monkey and Banana——hdu1069

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  2. HDU1069:Monkey and Banana(DP+贪心)

    Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. T ...

  3. hdu1069(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 分析: 每种石头有六种方法,那么等效为:有6*n种石头. 根据x和y排序(要保证相应的x.y总有 ...

  4. hdu1069线性dp

    /* dp[i]:取第i个方块时最多可以累多高 */ #include<bits/stdc++.h> using namespace std; struct node{ int x,y,z ...

  5. HDU1069(还是dp基础)

    今天不想说太多废话-由于等下要写自己主动提交机. 不知道能不能成功呢? 题目的意思就是,一个猴子,在叠砖头 ...以下的要严格大于上面的.求叠起来最高能到多少- n非常少,n^2算法毫无压力-话说dp ...

  6. hdu-1069(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:一群猴子,给出n块砖的长x宽y高z,用这些砖拼起的高度最高是多少, 要求底下的砖的长宽都要 ...

  7. 「暑期训练」「基础DP」 Monkey and Banana (HDU-1069)

    题意与分析 给定立方体(个数不限),求最多能堆叠(堆叠要求上方的方块严格小于下方方块)的高度. 表面上个数不限,问题是堆叠的要求决定了每个方块最多可以使用三次.然后就是对3n" role=& ...

  8. kuangbin专题十二 HDU1069 Monkey and Banana (dp)

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. HDU1069 Monkey and Banana —— DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS ...

随机推荐

  1. 构建NCBI本地BLAST数据库 (NR NT等) | blastx/diamond使用方法 | blast构建索引 | makeblastdb

    参考链接: FTP README 如何下载 NCBI NR NT数据库? 下载blast:ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+ 先了解 ...

  2. python怎样压缩和解压缩ZIP文件

    https://zhidao.baidu.com/question/1498409764366387259.html

  3. Vue组件(知识)

    form最后一节. 组件基础 组件的复用:  data必须是函数 组织 通过Prop向子组件传递data 单个根元素 通过event向父组件发送消息: 使用事件抛出一个value, 在组件上用v-mo ...

  4. centos 7安装vmtools时提示The path "" is not a valid path to the xxx kernel headers.

    解决办法: yum -y install kernel-headers kernel-devel gcc reboot

  5. java使用HttpClient

    HttpClient常用的包有两个 org.apache.http.client以及org.apache.commons.httpclient 我常用的是org.apache.http.client. ...

  6. 46. 47. Permutations

    求全排列. 1. 无重复元素 Given a collection of distinct numbers, return all possible permutations. For example ...

  7. 怎样设置IIS6.0的闲置超时时间

    打开IIS 信息服务管理器 1)打开IIS,点击应用程序池 2)找到Bs项目使用具体程序池(DspTest) 3)右键属性找到高级设置-- 进程模型 -- 闲置超时 4)设置闲置超时时间(默认为20分 ...

  8. POJ 3013最短路变形....

    DES:计算输的最小费用.如果不能构成树.输出-1.每条边的费用=所有的子节点权值*这条边的权值.计算第二组样例可以知道树的费用是所有的节点的权值*到根节点的最短路径的长度. 用dij的邻接矩阵形式直 ...

  9. js中的deom ready执行的问题

    一开始我想到这,DOMContentLoaded,不兼容, <!DOCTYPE html> <html> <head> <meta charset=" ...

  10. 最全的CSS浏览器兼容问题【FF与IE】

    1. Div居中问题 div设置 margin-left, margin-right 为 auto 时已经居中,IE 不行,IE需要设定body居中,首先在父级元素定义text-algin: cent ...