动态规划之最少硬币找零问题

小灰灰 2022-06-03 02:00 292阅读 0赞

假设有几种硬币,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。

  1. private static final int MAX_VALUE = Integer.MAX_VALUE - 2;
  2. public static int coinChange(int[] coins, int change) {
  3. int[] seq = new int[change + 1];
  4. int[] sum = new int[change + 1];
  5. for (int i = 1; i <= change; i++) {
  6. sum[i] = MAX_VALUE;
  7. }
  8. sum[0] = 0;
  9. for (int i = 1; i < change + 1; i++) {
  10. for (int j = 0; j < coins.length; j++) {
  11. if (i >= coins[j] && (1 + sum[i - coins[j]]) < sum[i]) {
  12. sum[i] = 1 + sum[i - coins[j]];
  13. seq[i] = j;
  14. }
  15. }
  16. }
  17. int j = change;
  18. while (j > 0) {
  19. System.out.print(coins[seq[j]] + "\t");
  20. j = j - coins[seq[j]];
  21. }
  22. System.out.println();
  23. return sum[change];
  24. }
  25. public static void main(String[] args) {
  26. Scanner in = new Scanner(System.in);
  27. int[] coins = {
  28. 2, 3, 4};
  29. System.out.println(String.format("coins is %s", Arrays.toString(coins)));
  30. while (in.hasNext()) {
  31. int change = in.nextInt();
  32. if (change == 0) {
  33. break;
  34. }
  35. int coinNumber = coinChange(coins, change);
  36. System.out.println(coinNumber == MAX_VALUE ? 0 : coinNumber);
  37. }
  38. }

这里写图片描述

http://www.edufyme.com/code/?id=33e75ff09dd601bbe69f351039152189

发表评论

表情:
评论列表 (有 0 条评论,292人围观)

还没有评论,来说两句吧...

相关阅读

    相关 动态规划硬币

    > 题目:几年教师节活动中,公司里为培训讲师提供了不同面值的饮料兑换券(每种面值数量不限),培训讲师可以领取兑换券去食堂兑换鲜榨果汁,要求兑换券和果汁必须等价,姜小虎想要兑换一

    相关 动态规划硬币问题

    凑硬币问题 假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 11 元,问如何组合才能使硬币的数量最少? 用数组d来存储当前每个面值可以对应的合成的最小