设为首页 加入收藏

TOP

hdu 1069 Monkey and Banana (dp)
2015-07-20 17:35:12 来源: 作者: 【 】 浏览:1
Tags:hdu 1069 Monkey and Banana
//把给定的长方体(不限)叠加在一起,叠加的条件是,上面一个长方体的长和宽都比下面长方体的长
/*
分析:因为每块积木最多有3个不同的底面和高度,因此先把每块积木看成三种不同的积木,
每种积木只有一个底面和一个高度。n中类型的积木转化为3*n个不同的积木的叠加,
对这3 * n个积木的长边从大到小排序;接下来的问题就是找到一个递减的子序列,
使得子序列的高度和最大即可。
数组dp:dp[i]表示是以第i块积木为顶的塔的最大高度
因此可得状态转移方程:dp[i] = max(dp[i],dp[j] + r[i].z)(满足积木j的底面长和宽都大于积木i的长和宽)
和宽短;求这些长方体能叠加的最高的高度.
*/
# include 
  
   
# include 
   
     # include 
    
      using namespace std; struct node { int x; int y; int z; }; struct node r[100010]; bool cmp(node a1,node a2) { if(a1.x!=a2.x) return a1.x>a2.x; return a1.y>a2.y; } int main() { int cas=0; int i,j,n,a,b,c,maxh; int dp[100010]; while(~scanf("%d",&n),n) { for(i=0,j=0; i
     
      =0; j--) { if(r[j].x>r[i].x&&r[j].y>r[i].y) { if(dp[j]+r[i].z>dp[i]) dp[i]=dp[j]+r[i].z; } } if(maxh
      
       
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[leetcode] Valid Parentheses @P.. 下一篇[C++可以这样学] 二 学习的开始

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)