1160 动态规划简单题2
本质和最长有序子序列一样
#include <stdio.h>
#include <stdlib.h>
typedef struct _mouse {
int size;
int speed;
int id;
}Mouse;
Mouse res[1100];
int f[1100];
int p[1100];
int cmp(const void* a, const void* b)
{
Mouse* pa = (Mouse*)a;
Mouse* pb = (Mouse*)b;
return (pa->size) - (pb->size);
}
int main()
{
int cnt = 1;
int siz, spd;
int i, j, k;
int max;
while (scanf("%d %d", &siz, &spd) != EOF) {
res[cnt].size = siz;
res[cnt].speed = spd;
res[cnt].id = cnt;
++cnt;
}
--cnt;
qsort(res+1, cnt, sizeof(Mouse), cmp);
f[cnt] = 1;
p[cnt] = 0;
max = cnt;
for (i = cnt-1; i > 0; --i) {
f[i] = 1;
p[i] = 0;
for (j = i+1; j <= cnt; ++j) {
if (res[j].speed < res[i].speed) {
if ((f[j]+1) > f[i]) {
f[i] = f[j] + 1;
p[i] = j;
if (f[i] > f[max]) max = i;
}
}
}
}
printf("%d\n", f[max]);
for (i = 0, k = max; i < f[max]; ++i) {
printf("%d\n", res[k].id);
k = p[k];
}
system("pause");
return 0;
}
typedef 
浙公网安备 33010602011771号