标签:
HDU2037:
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037
题解:
贪心算法:在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。若要用贪心算法求解某问题的整体最优解,必须首先证明贪心思想在该问题的应用结果就是最优解!!
本题是贪心法的一个最简单的例子,将结束时间按从小到大排好序,然后寻找下一个开始时间大于等于上一个结束时间的,如此往复,即可解决问题
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<vector> 7 #include<cmath> 8 using namespace std; 9 const int maxn=100+10; 10 typedef struct 11 { 12 int ts; 13 int te; 14 }t; 15 t p[maxn]; 16 const int cmp(const t s1,const t s2) 17 { 18 return s1.te<s2.te; 19 } 20 int main() 21 { 22 int n; 23 while(cin>>n) 24 { 25 if(n==0) 26 break; 27 for(int i=0;i<n;i++) 28 cin>>p[i].ts>>p[i].te; 29 sort(p,p+n,cmp); 30 int cnt=1; 31 for(int i=0;i<n;i++) 32 { 33 for(int j=i+1;j<n;j++) 34 if(p[i].te<=p[j].ts) 35 { 36 i=j; 37 cnt++; 38 continue; 39 } 40 } 41 cout<<cnt<<endl; 42 } 43 return 0; 44 }
标签:
原文地址:http://www.cnblogs.com/wolf940509/p/4273619.html