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;
}

 

posted @ 2009-04-15 21:20  断桥残雪  阅读(134)  评论(0)    收藏  举报