贪婪算法之找零钱

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关
过程
建立数学模型来描述问题;
把求解的问题分成若干个子问题;
对每一子问题求解,得到子问题的局部最优解;
把子问题的解局部最优解合成原来解问题的一个解。

例题:假设人民币有100,50,20,10,5,2,1,0.5,0.2,0.1等面值的钞票,我想要
68.9元,结果可以有多种,贪心算法得到的未必是最优的
下面是代码

package com.ds.practice;

import java.util.Arrays;
import java.util.Scanner;

/*贪婪算法*/
public class Test2 {
    int[] money = { 10000, 5000, 1000, 500, 200, 100, 50, 20, 10, 1 };
    static int[] num = new int[10];

    public static void main(String[] args) {
        System.out.println("输入1-10000之间的数字");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        new Test2().exchange(n);
        System.out.println(Arrays.toString(num));

    }

    public void exchange(int n) {
        for (int i = 0; i < money.length; i++) {
            while (n >= money[i]) {
                num[i] = n / money[i];
                n = n - money[i] * num[i];

            }

        }

    }
}

你可能感兴趣的:(算法,算法与数据结构)