HDOJ 1069(经典Dp)
2013-11-13 01:00
381 查看
状态转移方程: dp[i]=max(dp[j]+a[i].z,dp[i]);
既然每个石头有三种方法,那么就看成3个石头,先按长宽排序,在做dp就行了。
* This source code was highlighted byYcdoiT. ( style:
Zenbum )
既然每个石头有三种方法,那么就看成3个石头,先按长宽排序,在做dp就行了。
/********************** * author:crazy_石头 * Pro:HDOJ 1069 * algorithm:dp * Time:0ms * Judge Status:Accepted ***********************/ #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #define INF 0xfffffff using namespace std; const int maxn=1005; long long dp[maxn*3]; int n,ans; struct cube { int x,y,z; }a[maxn*3+5]; inline long long max(long long a,long long b) { return a>b?a:b; } inline long long min(long long a,long long b) { return a<b?a:b; } bool cmp(cube a,cube b) { if (a.x == b.x) return a.y>b.y; else return a.x>b.x; } int main() { int t=1; while(scanf("%d",&n)!=EOF&&n) { int x,y,z; for(int i=1;i<=n;i++) { scanf("%d%d%d",&x,&y,&z); a[i].x=max(x,y),a[i].y=min(x,y),a[i].z=z; a[i+n].x=max(x,z),a[i+n].y=min(x,z),a[i+n].z=y; a[i+2*n].x=max(y,z),a[i+2*n].y=min(y,z),a[i+2*n].z=x; } sort(a+1,a+3*n+1,cmp); memset(dp,0,sizeof(dp)); a[0].x=INF; a[0].y=INF; a[0].z=INF; ans=0; for(int i=1;i<=3*n;i++) { for(int j=0;j<i;j++) { if (a[j].x>a[i].x &&a[j].y>a[i].y) dp[i]= max(dp[i],dp[j]+a[i].z); } ans=max(ans,dp[i]); } printf("Case %d: ",t++); cout<<"maximum height = "<<ans<<endl; } return 0; } |
Zenbum )
相关文章推荐
- HDOJ 1069 Monkey and Banana 【DP】
- HDOJ1069 Monkey and Banana【dp】
- [HDOJ1069]Monkey and Banana(DP)
- HDOJ1069 猴子和香蕉【DP】
- hdoj 2084 数塔 【经典DP】
- hdoj 1466 计算直线的交点数 【经典DP】
- 一些DP经典问题:HDU(hdoj) 2126,1176,2546,1159
- hdoj 1950 Bridging signals 【DP经典问题LIS 的 经典算法】
- HDOJ1176 免费馅饼 【DP】+【经典数塔】
- HDOJ 1069 Monkey and Banana(DP)
- hdoj 2196 Computer 树形dp经典题
- hdoj 2084 数塔(经典dp)
- HDOJ 1069 DP
- HDU:1069 Monkey and Banana(经典动态规划DP)
- HDOJ_杭电2084_数塔问题,经典阶段DP动态规划问题
- hdoj--1069 Monkey and Banana(dp)
- 【经典DP】HDOJ 搬寝室 1421
- hdoj1069 Monkey and Banana(DP)
- hdoj 4508 湫湫系列故事——减肥记I(经典dp)
- hdoj1069 //升序dp