#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<math.h>
#include<set>
#define N 210
#define LL long long
using namespace std;
const int inf = 0x3f3f3f3f;
struct node
{
int h, v, s;
}m[1010];
int dp[1010];
int f[1010];
bool cmp(node a, node b)
{
return a.v > b.v;
}
void solve(int x)
{
if (!f[x])
{
printf("%d\n", x);
return;
}
solve(f[x]);
printf("%d\n", x);
}
int main()
{
int num = 0, h, v;
while (scanf("%d%d", &h, &v) != EOF)
{
m[++num].h = h, m[num].v = v;
m[num].s = num;
}
sort(m + 1, m + num + 1, cmp);
int amax = 0, f1;
for (int i = 1; i <= num; i++)
{
dp[i] = 1;
for (int j = 1; j < i; j++)
{
if (m[j].h < m[i].h && dp[i] < dp[j] + 1)
{
dp[i] = dp[j] + 1;
f[m[i].s] = m[j].s;
}
if (amax < dp[i])
{
amax = dp[i];
f1 = m[i].s;
}
}
}
printf("%d\n", amax);
solve(f1);
return 0;
}
hdu1160(最长上升子序列+路径记录)
最新推荐文章于 2022-07-29 21:49:23 发布