uva 437——The Tower of Babylon
2015-11-24 22:07
453 查看
题意:给定n个长方体,然后堆积最高的塔,要求上面的面积小于下面的面积。
思路:Dp,先把长方体的所有放的情况都构造出来放到数组里,对于当前节点,如果能够在前面找到面积比当前小,高度累加比当前高的则转移状态。
code:
思路:Dp,先把长方体的所有放的情况都构造出来放到数组里,对于当前节点,如果能够在前面找到面积比当前小,高度累加比当前高的则转移状态。
code:
#include <bits/stdc++.h> using namespace std; #define ft(i,s,t) for(int i=s;i<=t;i++) const int N=95; struct node { int x,y,h; }g ; int dp ,v[3]; bool cmp(node a,node b){ if (a.x==b.x) return a.y<b.y; return a.x<b.x; } int main() { int n,ca=1; while(~scanf("%d",&n),n) { int l=0; ft(j,0,n-1){ ft(i,0,2) scanf("%d",&v[i]); sort(v,v+3); ft(i,0,2) { g[l+i].h=v[(0+i)%3]; g[l+i].x=v[(2+i)%3]; g[l+i].y=v[(1+i)%3]; } swap(g[l+1].x,g[l+1].y); l+=3; } sort (g,g+l,cmp); int ans=0; ft(i,0,l-1) { dp[i]=g[i].h; for (int j=0;j<i;j++) { if (g[j].x<g[i].x&&g[j].y<g[i].y&&dp[i]<dp[j]+g[i].h) dp[i]=dp[j]+g[i].h; } ans=max(ans,dp[i]); } printf("Case %d: maximum height = %d\n",ca++,ans); } }
相关文章推荐
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- 01背包问题
- LeetCode之Maximum Product Subarray
- DP Flow