hdu 1069 monkey and banana(最长下降子序列)

来源:互联网 发布:unity3d 古代建筑模型 编辑:程序博客网 时间:2024/06/05 07:08

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069

思路:最长下降子序列

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int num=200;struct node{    int x,y,z;}data[num];int cnt,dp[num];void add(int a,int b,int c){    data[cnt].x=a;    data[cnt].y=b;    data[cnt++].z=c;}bool cmp(const node a,const node b){    if(a.x!=b.x)        return a.x>b.x;    else if(a.y!=b.y)        return a.y>b.y;    else        return a.z>b.z;}int ok(int a,int b){    if(data[a].x>data[b].x&&data[a].y>data[b].y)        return 1;    return 0;}int main(){    int n,i,j,a,b,c,cas=0,tmp,ans;    //freopen("in.txt","r",stdin);    while(scanf("%d",&n)!=EOF)    {        if(n==0)            break;        cnt=0;        cas++;        for(i=0;i<n;i++)        {            scanf("%d%d%d",&a,&b,&c);            add(a,b,c);            add(a,c,b);            add(b,a,c);            add(b,c,a);            add(c,a,b);            add(c,b,a);        }        sort(data,data+cnt,cmp);        dp[0]=data[0].z;        for(i=1;i<cnt;i++)        {            tmp=0;            for(j=0;j<i;j++)                if(ok(j,i)&&dp[j]>tmp)                    tmp=dp[j];            dp[i]=tmp+data[i].z;        }        ans=0;        for(i=0;i<cnt;i++)            if(dp[i]>ans)                ans=dp[i];        printf("Case %d: maximum height = %d\n",cas,ans);    }    return 0;}


0 0
原创粉丝点击