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\n",mice[i].w,mice[i].s,dp[i],mice[i].fa);

    }*/

    printf("%d\n",ansn);

    while(mice[ans].fa!=ans)

    {

        printf("%d\n",mice[ans].id);

        ans=mice[ans].fa;

    }

    printf("%d\n",mice[ans].id);

    return 0;

}

  

你可能感兴趣的:(HDU)