//2636041 2011-08-22 12:42:06 Accepted 1108 C++ 0 204 刷媛姐姐刷过的题@Unknown
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
struct mouse
{
int w, s, num, pre, next, flag;
}s[1001];
int cmp(struct mouse a, struct mouse b)
{
return a.w < b.w;
}
int main()
{
int i, j, cnt, max, pos, n;
cnt = 1;
while(scanf("%d%d", &i, &j) != EOF)
{
s[cnt].w = i;
s[cnt].s = j;
s[cnt].num = cnt;
cnt++;
}
sort(s+1, s+cnt, cmp);
for(i=1; i<cnt; i++)
s[i].pre = s[i].next = i;
max = 0;
for(i=1; i<cnt; i++)
{
s[i].flag = 1;
for(j=1; j<i; j++)
if(s[j].w < s[i].w && s[j].s > s[i].s && s[i].flag < s[j].flag + 1)
{
s[i].flag = s[j].flag + 1;
s[i].pre = j;
}
if(s[i].flag > max)
{
max = s[i].flag;
pos = i;
}
}
n = 1;
while(s[pos].flag != 1)
{
s[ s[pos].pre ].next = pos;
pos = s[pos].pre;
n++;
}
printf("%d\n", n);
while(n--)
{
printf("%d\n", s[pos].num);
pos = s[pos].next;
}
return 0;
}
ZOJ 1108 FatMouse's Speed【DP】【最大上升子序列】
最新推荐文章于 2023-05-31 15:52:38 发布