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;
}
原文:http://www.cnblogs.com/sola1994/p/4346083.html