//0MS 1688K
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
#define MAX_N 1005
static struct mice
{
int w;
int s;
int index;
}vecs[MAX_N];
static int cmp(mice&lhs,mice&rhs)
{
return lhs.w<rhs.w;
}
static int cnt = 0;
static int f[MAX_N];
static int path[MAX_N];
static void DP()
{
f[0] = 1;
int ans = 0;
int endx = 0;
memset(path,-1,sizeof(path));
for (int i=1;i<cnt;++i)
{
f[i] = 1;
for (int j=i-1;j>=0;--j)
{
if (vecs[i].s<vecs[j].s&&vecs[i].w>vecs[j].w)
{
//f[i] = max(f[i],f[j]+1);
if (f[i]<f[j]+1)
{
f[i] = f[j]+1;
path[i] = j;
}
if (ans<f[i])
{
ans = f[i];
endx = i;
}
}
}
}
printf("%d\n",ans);
stack<int>stk;
for (int i=endx;i>0;i=path[i])
{
stk.push(vecs[i].index);
}
while(!stk.empty())
{
printf("%d\n",stk.top());
stk.pop();
}
}
int main()
{
int w,s;
while(cin>>w>>s)
{
vecs[cnt].w = w;vecs[cnt].s =s;
vecs[cnt].index = cnt+1;
cnt++;
}
sort(vecs,vecs+cnt,cmp);
DP();
return 0;
}
hdoj1160最长上升子序列
最新推荐文章于 2017-10-16 15:45:19 发布