所谓“贪心算法”是指:在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。
经典问题:时间序列问题 点击打开链接 hdoj2037
解题思路:按照题目尽可能多看节目的要求,在证明贪心算法在此题的适用性后,将t[i]按照结束时间e进行排序,以总是选择开始时间大于等于上一个节目的结束时间并且自身结束时间早的节目。
源代码:
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <iostream> #include <algorithm> using namespace std; struct T { int s; int e; }t[101]; int cmp(T x,T y) { return x.e<y.e; } int main() { int n; int i; while(cin>>n&&n) { for(i=0;i<n;i++) { cin>>t[i].s>>t[i].e; } sort(t,t+n,cmp); int tmp = t[0].e; int cnt = 1; for(i=1;i<n;i++) { if(t[i].s>=tmp) { cnt++; tmp = t[i].e; } } cout<<cnt<<endl; } return 0; }