[C.C++] 算法文章---贪心

1860 0
yangrongqi 2023-5-18 19:37:16 | 显示全部楼层 |阅读模式
——————————————————贪心——————————————————
贪心算法也叫贪婪算法,就是说在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。”贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。

贪心的一般情况解题思路可以分为:
1.建立数学模型来描述问题
2.把需要求解得问题分成若干个问题
3.对于每个问题求解,得到子问题的局部最优解
4.把子问题求解,得到局部最优

例子:
我要看许多场演出
可以将一个活动时间长短来排序(错误)
还可以按照活动开始时间选择(错误)
按照活动结束时间选择(正确)
最后一种是正确的,也就是最贪心的一种
用代码实现:
#include <bits/stdc++.h>
using namespace std;struct node{
        int x,y;
}f[1000005];
int n,ans,t;bool cmp(node a,node b) {
        return a.y<b.y;
}
int main(){       
        cin>>n;
        for(int i=1;i<=n;i++){       
                cin>>f[i].x>>f[i].y;       
        }       
        sort(f+1,f+n+1,cmp);//按照活动结束时间从早到晚排序
        t=f[1].y,ans=1; //第一场活动一定能参加       
        for(int i=2;i<=n;i++){//后面的每一场比较 能参加都参加
                if(f[i].x>=t){//当前活动开始时间晚于上一场活动的结束时间                                                ans++; //活动数目加一                       
                        t=f[i].y;//更新结束时间               
                }       
        }       
        cout<<ans;       
return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

yangrongqi

高级红客

关注
  • 5
    主题
  • 0
    粉丝
  • 1
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行