多谢PORKer的纠错,自己太粗心了,连个排序也错。。。。谢谢他长期以来的纠错
#include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int a,b,h; }data[200]; int hash[200]; int cmp(const void*a,const void*b) { struct node *p1,*p2; p1=(struct node*)a; p2=(struct node*)b; if(p1->a!=p2->a) return p2->a-p1->a; else return p2->b-p1->b; } int n,temp; void getdata(); int dfs(int,int ,int); int main() { /* freopen("output.txt","w",stdout);*/ int max=0,t=0; while(scanf("%d",&n)&&n) { memset(hash,0,sizeof(hash)); getdata(); qsort(data,n*6,sizeof(data[0]),cmp); max=dfs(0,0x7FFFFFFF,0x7FFFFFFF); printf("Case %d: maximum height = %d\n",++t,max); } return 0; } int dfs(int start,int nowa,int nowb) { int i,max=0,k; if(start>=n*6) return 0; if(hash[start]) return hash[start]; for(i=start;i<n*6;i++) { if(data[i].a<nowa&&data[i].b<nowb) { k=data[i].h+dfs(i+1,data[i].a,data[i].b); if(k>max) max=k; } } hash[start]=max; /* printf("start:%d (%d,%d) max:%d\n",start,nowa,nowb,max);*/ return max; } void getdata() { int i,a,b,h; temp=0; for(i=0;i<n;i++) { scanf("%d %d %d",&a,&b,&h); data[temp].a=a; data[temp].b=b; data[temp].h=h; temp++; data[temp].a=b; data[temp].b=a; data[temp].h=h; temp++; data[temp].a=a; data[temp].b=h; data[temp].h=b; temp++; data[temp].a=h; data[temp].b=a; data[temp].h=b; temp++; data[temp].a=h; data[temp].b=b; data[temp].h=a; temp++; data[temp].a=b; data[temp].b=h; data[temp].h=a; temp++; } }