-
Monkey and Banana
- HDU - 1069
- 有序长宽高存储各种长方体;
- 从小到大排序
- 从小到大动态更新。
-
if(a[i].x>a[j].x&&a[i].y>a[j].y) dp[i]=max(dp[i],dp[j]+a[i].z);
-
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; #define maxn 115 #define ll long long int ans,d[5],cnt,n; int dp[maxn],index; struct node { int x,y,z; } a[maxn]; bool cmp(node a,node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int main() { while(scanf("%d",&n)) { index++; if(n==0) break; cnt=0; for(int i=0; i<n; i++) { scanf("%d%d%d",&d[0],&d[1],&d[2]); sort(d,d+3); a[cnt].x=d[1]; a[cnt].y=d[0]; a[cnt++].z=d[2]; a[cnt].x=d[2]; a[cnt].y=d[0]; a[cnt++].z=d[1]; a[cnt].x=d[2]; a[cnt].y=d[1]; a[cnt++].z=d[0]; } sort(a,a+cnt,cmp); for(int i=0; i<cnt; i++) dp[i]=a[i].z; for(int i=0; i<cnt; i++) for(int j=0; j<i; j++) { if(a[i].x>a[j].x&&a[i].y>a[j].y) dp[i]=max(dp[i],dp[j]+a[i].z); } sort(dp,dp+cnt); printf("Case %d: maximum height = %d\n",index,dp[cnt-1]); } return 0; }
05-19
780
