算法练习--贪心

1.前言

贪心算法是一种在每一步选择中都采取当前状态下最优(即局部最优)的决策,从而希望导致全局最优解的算法策略。它不回溯或重新考虑之前的选择,适用于问题具有**“贪心选择性质”和“最优子结构”的情况。

接下来我们来详细学习他

2. 情节引入

假如说你有许多1元,2元,5元的纸币,让你凑11元,并且用纸币的数量最少

这种问题相信都能做出,也就是5+5+1=11,尽可能用大数来解决问题
也就是我们先让程序遍历最大的面额(5),达到局部最优解,再次通过剩余的零钱(1)再次得到最优解,最后同一变成全局最优解

这就是贪心。

但如果说每一个纸币有个数,怎么做呢?

这就需要将目前所需要的最大纸币个数(money/Value[i])与我们仅有的(Count[i])进行比较了

const int N=7; 
int[N] Count={3,0,2,1,0,3,5};
int[N] Value={1,2,5,10,20,50,100};
public static int solve(int money) 
{
	int num=0;
	for(int i=N-1;i>=0;i--) 
	{
		int c=min(money/Value[i],Count[i]);
		money -= c*Value[i];
		num+=c;
	}
	if(money>0) num=-1; // 这就是凑钱失败
	return num;
}
public static int min(int a, int b){
	... // 判断最小,这里就不写了
}

3.结语

这是我第4次发博客,有问题可以私信
谢谢啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值