不得不说这道题的贪心策略对于那时我来说真的挺难想的,不过贪心策略难想好像就是贪心题目的特色?
按照结束时间排序,优先选取结束时间早的。
#include <stdio.h> main() { int n, end[101], start[101], r, i, j, sum = 0, k; while(scanf("%d", &n) != EOF && n) { sum = 0; for(i = 0; i < n; i++) scanf("%d%d", &start[i], &end[i]); for(i = 0; i < n-1; i++) { k = i; for(j = i+1; j < n; j++) { if(end[k] > end[j]) k = j; } if(k != i) { r = end[k]; end[k] = end[i]; end[i] = r; r = start[k]; start[k] = start[i]; start[i] = r; } } //for(i = 0; i < n; i++) // printf("%d %d ", start[i], end[i]); k = 0; for(i = 1; i < n; i++) { if(end[k] <= start[i]) { k = i; sum++; } } printf("%d ", sum+1); } return 0; }