给我往死里贪!——24行代码AC_今年暑假不AC HDU - 2037(贪心模板讲解)

励志用少的代码做高效表达


思路分析:

贪心算法模板题

贪心算法简单来讲即自顶向下,求解出每个子最优解,且每个子问题不会对下一个问题产生影响

该题算法模型为:
1.若每次选取开始时间最早的节目,无法求出最优解
2.若每次选取播放时间最短的节目,无法求出最优解
3.若每次选取结束时间最短的节目,用数学归纳法可以求出最优解

算法设计:
1.采用结构体数组存放数据
2.用冒泡排序法对 节目结束时间 进行升序排序
3.遍历节目数组,找出每一个节目结束时间最早的节目,并且当前节目开始时间需大于等于上一个节目结束时间
4.计算出符合条件的节目总数

注意:在实现代码时,不需要在结束时间相同的情况下比较开始时间,因为若结束时间一致,则这两个节目对下一个节目产生的影响是相同的


#include<bits/stdc++.h> 
using namespace std;
struct Pair{
    
    
	int a, b;
	Pair() {
    
     }
};
int cmp1(Pair p1, Pair p2) {
    
    
	return p1.b < p2.b;
}
int main() {
    
    
	ios::sync_with_stdio(false);
	int n; while(cin>>n && n) {
    
    
		Pair p[105];				
		for(int i = 0; i < n; i++) {
    
    
			int x, y; cin>>x>>y;
			p[i].a = x;  p[i].b = y;
		}
		sort(p, p+n, cmp1);		
		int sum=1, flag = p[0].b; 
		for(int i = 0; i < n; i++) 
			if(p[i].a >= flag) {
    
     flag=p[i].b; sum++; }	
		cout << sum << endl;
	} 
return 0; }

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/108237625
今日推荐