题意:给出一连串老鼠的体重和速度,求最长的序列符合老鼠体重是严格递增,而速度是严格递减。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAX(a, b) ((a) > (b) ? (a) : (b))
struct Mice
{
int weight, speed, mark;
Mice() {}
Mice(int w, int s, int m) : weight(w), speed(s), mark(m) {}
bool operator <(const Mice& rhs) const
{
if (weight == rhs.weight)
return speed > rhs.speed;
return weight < rhs.weight;
}
} mice[1009];
int cnt;
int F[1009];
int last[1009];
void print(int sub)
{
if (sub != -1)
{
print(last[sub]);
printf("%d\n", mice[sub].mark);
}
}
int main()
{
int w, s, i, j, max, max_sub;
cnt = 0;
while (scanf("%d%d", &w, &s) != EOF)
{
mice[cnt] = Mice(w, s, cnt+1);
cnt += 1;
}
sort(mice, mice+cnt);
max = F[0] = 1, last[0] = -1, max_sub = 0;
for (i = 1; i < cnt; ++i)
{
F[i] = 1, last[i] = -1;
for (j = 0; j < i; ++j)
{
if (mice[i].weight > mice[j].weight && mice[i].speed < mice[j].speed && F[i] < F[j] + 1)
F[i] = F[j] + 1, last[i] = j;
}
if (max < F[i])
max = F[i], max_sub = i;
}
printf("%d\n", max);
print(max_sub);
return 0;
}