简介:贪心算法顾名思义就是比较比较贪心的一个算法,思路就是要贪。做的选择每一步都是最贪的。
例题:你提着一个袋子去买米,正好米店做活动,给你免单,但是只能用你自己的袋子装。米店里有三种米,分别是 白米,黑米,紫米,假设三种米价值分别为2元一斤,3元一斤,4元一斤,你的袋子可以装20斤,但是由于你来的太晚了,三种米分别只剩下15斤,10斤,4斤,那么你怎么装才能让你装的米,价值最大。
解析:很显然,我们应该先挑贵的装,这才符合我们贪心的想法。贵的紫米只有4斤,装完紫米,还有空位,这时候就去装黑米,装完黑米还有空位,这时候就去装白米,直到装不下了。
伪代码:
value[3],weight[3],cap=20,money=0,;//三种米的价值value,剩余数量weight,袋子容量cap,装了的米的价值money;
sort(value,weight);//将米的价值按高到低排好序,同时米的剩余数量对应好,
for(i=0;i<3;i++)//循环遍历米的价值数组 如果袋子还有容量,就装米,如果袋子容量小于这种米数量,那就只装剩下容量的数量。如果没有空位了,推出循环。
if(cap>0)
if(cap>=weight[i])
{money+=weight[i]*value[i];
cap=cap-weight[i]}
else {
money+=cap*value[i];
cap=0;}
else break;
01背包问题:进阶思考:
买米换成买水果,袋子变成10斤,水果为苹果,香蕉,菠萝,三种水果每种只有1个,重量分别为
4,5,7 ,价值分别为 4,5,8;水果不可切开,请问如果装水果才能价值最大化。
未完待续: