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

題目鏈接: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;
}


發佈了50 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章