hdu 1069 Monkey and Banana
郁闷呐,课件说是搜索题,结果搜了半天还是超时,看来剪枝的能力还是不行呀
最后,悲剧的用简单的DP过的
这题目用DP 的思想还是比较简单的
#include<iostream> using namespace std; int n,height[100],max1; struct node { int x,y,z,area; node(int _x=0,int _y=0,int _z=0):x(_x),y(_y),z(_z) { area=x*y; }; }a[100]; int cmp(const void* a1,const void *a2) { return (*(node*)a2).area-(*(node*)a1).area; } bool fun(int a1,int b1,int a2,int b2) { if((a1<a2&&b1<b2)||(a1<b2&&b1<a2)) return true; return false; } int main() { int x,y,z,cas=0; while(cin>>n&&n) { int b=0; for(int i=0;i<n;i++) { cin>>x>>y>>z; a[b++]=node(x,y,z); a[b++]=node(y,z,x); a[b++]=node(z,x,y); } n=n*3; qsort(a,n,sizeof(node),cmp); max1=-1; memset(height,0,sizeof(height)); height[0]=a[0].z; for(int i=1;i<n;i++) { int temp=0; for(int j=0;j<i;j++) { if(fun(a[i].x,a[i].y,a[j].x,a[j].y)&& temp<height[j]) { temp=height[j]; } } height[i]=temp+a[i].z; if(height[i]>max1) max1=height[i]; } cout<<"Case "<<++cas<<": maximum height = "<<max1<<endl; } return 0; }