贪心

本文介绍了贪心算法的基本概念,强调了其每次选择局部最优解的特点,并指出贪心算法的正确性需要证明。通过一个经典例题——合并果子,展示了如何使用优先级队列实现贪心策略,以求得最大合并价值。虽然贪心算法实现简单,速度快,但证明其全局最优性往往较为困难。

贪心

贪心算法是一种不难也不难理解的算法
贪心算法,每一次决策时采取当前意义下最优策略的算法,依据局部最优性,贪心的正确性需要进行证明,不能把贪心和DP搞混。
所谓贪心就是说每次做出当前看起来 最好的选择,大多数这个时候是错的,但是有的时候,确实是对的
贪心,非常好实现,速度也很快
但是很难证明
1.微扰,贪心经常与排序在一起,微小的改变都会对整体改变
2.范围缩扩,在局部范围内不会改变结果
3.决策包容,什么意思,就是说其他可能的集合,也就是互相包容

贪心的代码因题而异。
这里为了方便理解,我把一道经典例题 合并果子 的代码拿过来,其实就是运用的优先级队列,每次取最大的两个

#include<iostream>
#include<queue>
using namespace std;
int n,s=0,t,a,b;
priority_queue <int,vector<int>,greater<int> > pq;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>t;
		pq.push(t);
	}
	while(1)
	{
		if(pq.size()==1)
		{
			break;
		}
		a=pq.top();
		pq.pop();
		b=pq.top();
		pq.pop();
		s+=a+b;
		pq.push(a+b);
	}
	cout<<s<<endl;
	return 0;
}  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值