hdu 1069 记忆化搜索

来源:互联网 发布:奇兵网络小程序 编辑:程序博客网 时间:2024/05/22 10:31
自己脑子不灵活,感觉哪根线都与DP接不上轨。。。。。好吧,我先学搜索,接触记忆化,再回来膜拜DP了

多谢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++;    }}


原创粉丝点击