hdoj1069 Monkey and Banana(DP)
2017-06-08 10:47
288 查看
dp[i]代表第i块砖头为顶层时的最大高度。
dp[i]=max{dp[j]+b[i].z,dp[i]}。
因为一类砖头可以拿任意块,所以一类砖头最多可以有3种高度。
最后目的是找到一个单挑递减的序列使得累起来的高度之和最大。
代码如下:
dp[i]=max{dp[j]+b[i].z,dp[i]}。
因为一类砖头可以拿任意块,所以一类砖头最多可以有3种高度。
最后目的是找到一个单挑递减的序列使得累起来的高度之和最大。
代码如下:
#include<stdio.h> #include<math.h> #include<string> #include<algorithm> using namespace std; struct block { int x,y,z; }; bool cmp(const block a,const block b) { if(a.x==b.x)return a.y>b.y; else return a.x>b.x; } int max1(int a,int b) { return (a>b)?a:b; } block b[555]; int dp[555]; int main() { int n,i,k,j,x,y,z,max,t=1; while(~scanf("%d",&n)&&n) { k=0;max=-1; for(i=0;i<n;i++) { scanf("%d%d%d",&x,&y,&z); b[k].x=max1(x,y); b[k].y=min(x,y); b[k].z=z; k++; b[k].x=max1(x,z); b[k].y=min(x,z); b[k].z=y; k++; b[k].x=max1(z,y); b[k].y=min(z,y); b[k].z=x; k++; } sort(b,b+k,cmp); for(i=0;i<k;i++) { dp[i]=b[i].z; for(j=0;j<i;j++) if(b[j].x>b[i].x&&b[j].y>b[i].y) if(dp[j]+b[i].z>dp[i])dp[i]=dp[j]+b[i].z; if(max<dp[i])max=dp[i]; } printf("Case %d: maximum height = %d\n",t++,max); } return 0; }
相关文章推荐
- hdoj 1069 Monkey and Banana【dp】
- [HDOJ1069]Monkey and Banana(DP)
- HDOJ1069 Monkey and Banana(DP,LIS)
- HDOJ 1069 Monkey and Banana 【DP】
- HDOJ1069 Monkey and Banana【dp】
- hdoj 1069 Monkey and Banana 【DP】
- hdoj--1069 Monkey and Banana(dp)
- hdoj1069_Monkey and Banana(dp)
- HDOJ1069-Monkey and Banana(DP)
- HDOJ 1069 Monkey and Banana(DP)
- HDU 1069 Monkey and Banana(DP)
- [HDU 1069]Monkey and Banana(DP)
- hdu 1069 Monkey and Banana DP
- hdu 1069 Monkey and Banana(dp)
- hdu 1069 Monkey and Banana(dp求最大高度)
- HDU 1069 Monkey and Banana(基础dp)
- HDU 1069—— Monkey and Banana——————【dp】
- C - Monkey and Banana HDU - 1069 简单dp
- hdu 1069 Monkey and Banana(基础dp)
- zoj 1093 || hdu 1069 Monkey and Banana( Easy DP )