ZOJ 1076
2014-04-30 18:38
260 查看
思路:贪心,每次都选结束位置小的,这样保证了最小程度的影响后面的串,所以一定是最优解。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define MAX 1111 using namespace std; typedef struct Node{ int st, end, id; bool operator < (const Node &a) const{ if(end == a.end) return st > a.st; return end < a.end; } }Node; Node node[MAX]; int temp[MAX]; int main(){ int n, ee, ss, k; freopen("in.c", "r", stdin); while(~scanf("%d", &n) && n){ for(int i = 1;i <= n;i ++){ scanf("%d%d", &node[i].st, &node[i].end); node[i].id = i; } sort(node+1, node+n+1); ee = -1; k = 0; for(int i = 1;i <= n;i ++){ if(node[i].st > ee){ temp[k++] = node[i].id; ee = node[i].end; } } for(int i = 0;i < k-1;i ++) printf("%d ", temp[i]); printf("%d\n", temp[k-1]); } return 0; }