【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; }
浙公网安备 33010602011771号