UVA - 10131 Is Bigger Smarter?

dp,不多说。。。短板还是在于编程能力。。。

遇到一个目前还没搞清楚的问题,elephant里重载小于号存在问题,这里本地codeblocks必须加const,oj上却不用加。。。。重新回去学c++吧。。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAX 1100
using namespace std;


struct elephant
{
    int w,i,index;
    bool operator < (elephant other)const
    {
        if(w<other.w)
            return true;
        else if(w==other.w&&i>=other.i)
            return true;
        return false;
    }
}ele[MAX];


int dp[MAX],father[MAX];


void print(int index)
{
    if(index<0)
        return ;
    print(father[index]);
    printf("%d\n",ele[index].index);
}


int main()
{
    int a,b,i=0,j,t,maxx;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        ele[i].index=i+1,ele[i].w=a,ele[i].i=b;
        //printf("%d %d %d\n",ele[i].w,ele[i].i,ele[i].index);
        i++;
    }
    //printf("%da",i);
    sort(ele,ele+i);
    //for(j=0;j<i;j++)
    //    printf("%d %d %d\n",ele[j].w,ele[j].i,ele[j].index);
    memset(dp,0,MAX*4);
    dp[0]=1,father[0]=-1;
    for(j=1;j<i;j++)
    {
        dp[j]=1,father[j]=-1;
        for(t=0;t<j;t++)
        {
            if(ele[t].w<ele[j].w&&ele[t].i>ele[j].i)
            {
                if(dp[t]+1>dp[j])
                {
                    dp[j]=dp[t]+1;
                    father[j]=t;
                }
            }
        }
    }
   maxx=0;
    for(j=1;j<i;j++)
        if(dp[j]>dp[maxx])
        maxx=j;
    printf("%d\n",dp[maxx]);
    print(maxx);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值