那一个pre记录一下路径,递归输出就行了。
n2可以过
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 10000+10;
struct Mouse
{
int speed,wight,pos;
operator < (const Mouse &t)
{
return wight < t.wight;
}
}s[maxn];
int pre[maxn];
int max_length[maxn];
void print(int x)
{
if(x != 0)
{
print(pre[x]);
cout << s[x].pos << endl;
}
}
int main()
{
int E = 0;
while(scanf("%d%d",&s[E].wight , &s[E].speed) != EOF)
{
s[E].pos = E+1;
E++;
}
sort(s,s+E);
// for(int i = 0 ; i < E ; i++) cout << s[i].wight << endl;
int maxx = 0;
int ed;
max_length[0] = 1;
for(int i = 1 ; i < E ; i++)
{
max_length[i] = 1;
for(int j = 0 ; j < i ; j++)
{
if(s[i].wight > s[j].wight &&s[i].speed < s[j].speed && max_length[j]+1 > max_length[i])
{
pre[i] = j;
max_length[i] = max_length[j] + 1;
if(max_length[i] > maxx)
{
maxx = max_length[i];
ed = i;
}
}
}
}
cout << maxx << endl;
if(maxx)
print(ed);
return 0;
}