贪心算法:
遵循某种规律或者规则,不断贪心的选取当前最优的解的方法
有1元,5元,10元,20元,100元的钞票是无穷张,现用这些钞票支付x元,最少需要多少?
x=628
尽可能的选择面值最大较大的钞票 ----200*3+20+5+1*3
面值较大的是比自己面值小的倍数,所以如果使用较大面值能满足要求时,则需要更多的面值较小的来替换
拓展---假设给定的钞票的面值不是倍数关系,则贪心是否成立?
假定给1 2 7 10 x=14 贪心 10+2*2(3张)
实际上最优为 7+7(2张)
public static void main(String[] args) {
int []rmb= {200,100,20,10,5,1};
int num=rmb.length;
int x=628;
int count=0;
int use;//使用的张数
for(int i=0;i<num;i++) {
use=x/rmb[i];
count=count+use;
x=x-rmb[i]*use;//减掉凑成的面额
System.out.printf("需要%d张面值为%d的钞票\n",use,rmb[i]);
}
System.out.println("总需要"+count+"张");
}