贪心算【导师实操恋爱视频】法
贪心算法也叫作贪婪算法,是指在求解问题时总做出在当前看来最好的【QQ】选择,就是不从整体考虑问题,仅在某种意义上的局部最优解【⒈】。虽然不是所有问题都能得到最优解,但是面对范围广泛的许【О】多问题时,能产生整体最优解或者是整体最优解的近似值。
【1】贪心算法思路:
从问题的【6】某一个初始解出发,逐步逼近给定的目标,以便更快的【9】求出更好的解。当达到算法中某一步不能再向前时,就停止算法【⒌】,给出一个近似解。
(1)【2】不能保证最后的解是最优解; (2)【б】不能用来求最大、最小解问题; (3)只能求满足某些约束条件的可行解范围。 矩阵选数问题
在N行M列的正整数矩阵中,要求从每行中选出1个数,使得选出的总共N个数的和最大。(1=N, M=100,结果在int范围内) 【分析】要使总和最大,则每个数要尽可能大,自然应该选每行中最大的那个数。
局部最优解:每行中的最大数;全局最优解:N个数和的最大值。
#include stdio.h #define maxn 105
int maxnum; --maxnum记录每行中的最大值 int sum=0; --sum记录每行中的最大值之和 int a[maxn][maxn]; int main()
scanf(\"%d %d\ for(i=0;iN;i++) for(j=0;jM;j++) scanf(\"%d\ for(i=0;iN;i++) maxnum=0;
for(j=0;jM;j++) --循环更新每行的最大值 if(a[i][j]maxnum) maxnum=a[i][j]; sum+=maxnum; printf(\"%d\ return 0; 钱币找零问题
有1元、5元、10元、50元、100元、500元的硬币各C1, C5, C10, C50, C100, C500枚。现在要用这些硬币来支付A元,最少需要多少枚硬币?若有解,输出最少硬币数;否则输出“-1”(0=C1, C5, C10,
C50, C100, C500=109,0=A=109)
【分析】凭直觉,我们可以优先使用面值大的硬币(在这里是500、100、50、10、5、1) #include iostream using namespace std; int ans=0; --所需硬币总数
int ret[6]={0}; --所需每种硬币的数量 int moneycnt[6];--现有6种硬币的数量
int moneyval[6]={1,5,10,50,100,500};--每种硬币的面值 int main() int temp; for(i=0;i6;i++) cinmoneycnt[i];
--贪心策略:优先选择面值大的硬币 for(i=5;i=0;i--)
--temp记录使用硬币i的枚数,注意不能超过moneycnt[i] temp=min(A-moneyval[i],moneycnt[i]); --剩余支付金额 A-=(temp*moneyval[i]); --使用硬币i的枚数+temp ret[i]+=temp; --已使用的硬币数+temp
ans+=temp;
--A0表示无法用现有硬币支付A元,故输出-1 cout\"-1\"endl;
--其它情况:可完成支付 --最少硬币数 coutansendl; --每种硬币需要的数量 for(i=0;i6;i++)
coutmoneyval[i]\"元:\"ret[i]endl; return 0;
array.add(scanner.nextInt());
printf(\"%d,%d\
为什么这样做是正确的呢?采用反证法:假设当前可以加的节目我们没有加入进去。那么在最优的方案中我们总可以通过取消一个节目将这个节目加入进去
贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。
? 通过局部最优选择来构造最优解。也就是说,当考虑做何选择时,我们只考虑对当前问题最佳的选择而不考虑子问题的结果。 一般来说,贪心算法的证明围绕着:整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。
for i in range(0, len(goods)):
HashSetString tempSet = new HashSetString(); int Value[N]={1,2,5,10,20,50,100}; -***********************************************************
贪心算法
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务