hdu 1160 FatMouse's Speed(dp)

http://acm.hdu.edu.cn/showproblem.php?pid=1160

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
struct Node
{
    int w,s,id,fa;
};
Node mice[1000+10];
int dp[1000+10];

int cmp(Node a,Node b)
{
    return a.w<b.w;
}

int main()
{
    int i,j,k;
    int cnt=1;
    int t1,t2;
    int ans,ansn;
    while(scanf("%d%d",&t1,&t2)!=EOF)
    {
        if(t1==-1) break;
        mice[cnt].w=t1;
        mice[cnt].s=t2;
        mice[cnt].id=cnt;
        cnt++;
    }
    sort(mice+1,mice+cnt,cmp);
    ans=mice[cnt-1].id;
    ansn=1;
    for(i=1;i<cnt;i++)
    {
        mice[i].fa=i;
        dp[i]=1;
    }
    for(i=cnt-2;i>=1;i--)
    {
        for(j=i+1;j<cnt;j++)
        {
            if(dp[j]+1>dp[i]&&mice[i].w<mice[j].w&&mice[i].s>mice[j].s)
            {
                dp[i]=dp[j]+1;
                mice[i].fa=j;
            }
        }
        if(dp[i]>ansn) {ans=i;ansn=dp[i];}
    }

    /*
    for(i=1;i<cnt;i++)
    {
        printf("%d %d %d %d
",mice[i].w,mice[i].s,dp[i],mice[i].fa);
    }*/
    printf("%d
",ansn);
    while(mice[ans].fa!=ans)
    {
        printf("%d
",mice[ans].id);
        ans=mice[ans].fa;
    }
    printf("%d
",mice[ans].id);
    return 0;
}

  

原文地址:https://www.cnblogs.com/sola1994/p/4346083.html