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次发博客,有问题可以私信
谢谢啦
2069

被折叠的 条评论
为什么被折叠?



