【HDOJ】1257 最少拦截系统

这道题目是书中的DP的习题,但是也可以按贪心做。需要注意的是100 60 30 40 10 20的结果应该是2,而不是3,因为100 60 30 20可以构成降序序列,40 10是另一个。注意这点即可。

#include <stdio.h>

#define MAXNUM 1005

int heights[MAXNUM];
int visit[MAXNUM];

int main() {
    int n, amount;
    int i, j, tmp;

    while (scanf("%d", &n) != EOF) {
        for (i=0; i<n; ++i)
            scanf("%d", &heights[i]);

        memset(visit, 0, sizeof(visit));
        amount = 0;

        for (i=0; i<n; ++i) {
            if (visit[i])
                continue;
            visit[i] = 1;
            tmp = heights[i];
            amount++;
            for (j=i+1; j<n; ++j) {
                if (visit[j]==0 && heights[j]<tmp) {
                    tmp = heights[j];
                    visit[j] = 1;
                }
            }
        }

        printf("%d\n", amount);
    }

    return 0;
}

 

posted on 2014-03-09 17:07  Bombe  阅读(112)  评论(0)    收藏  举报

导航