美文网首页
贪心算法(硬币找零问题)

贪心算法(硬币找零问题)

作者: I讨厌鬼I | 来源:发表于2019-05-08 13:59 被阅读0次

问题描述

小Q手上有 n 种不同面值的硬币,每种硬币有无限多个。为了方便购物,他希望带尽量 少的硬币,但是要能组合出1m 之间的任意值。输入的第一行为两个整数:mn,他们的意义如题目描述。 接下来的 n 行,每行一个整数,第i+1 行的整数表示第 i 种硬币的面值。输出的最少需要携带的硬币数量,如果无解则输出-1
50%的数据:1<=n<=101<=m<=10^3
100%的数据:1<=n<=1001<=m<=10^9

输入:

20 4 
1 
2 
5 
10

输出:

5

思路:

数据量很大,dp不好做,也不好压缩,应该采用贪心的思路。首先如果没有面值为1的硬币必定无法满足要求可以直接输出-1,接下来考虑贪心策略,设想如果能够组合出15之间的任何数值,只要一个6的硬币就能组合出111的任意值,既如果当前能够组合出1n的硬币,再加入一个n+1面值的银币就能组合出1n+n+1的所有面值。所以基本思路就是用一个变量cur存储当前能表示的面值,将硬币排序,从大往小找到第一个小于等于cur+1的硬币,硬币数加一同时更新cur,当cur大于m时输出。

代码:

import java.util.*;
public class Main {
    public static void main(String arg[]){
        Scanner in = new Scanner(System.in);
        while (in.hasNext()){
            int m = in.nextInt();
            int n = in.nextInt();
            int coin[] = new int[n];
            for (int i=0; i<n; i++){
                coin[i] = in.nextInt();
            }
            Arrays.sort(coin);
            if (coin[0] != 1){
                System.out.println(-1);
                continue;
            }
            int cur = 0, count = 0;
            while (cur < m){
                for (int i=coin.length-1; i>=0; i--){
                    if (coin[i] <= cur + 1){
                        count++;
                        cur += coin[i];
                        break;
                    }
                }
            }
            System.out.println(count);
        }
    }
}

相关文章

  • 贪心算法(硬币找零问题)

    问题描述 小Q手上有 n 种不同面值的硬币,每种硬币有无限多个。为了方便购物,他希望带尽量 少的硬币,但是要能组合...

  • 刷题笔记(经典题目汇总)

    1.硬币找零问题(腾讯q币找零) 解法:贪心策略 只考虑最少需要的硬币总数而不考虑具体的组合对于 1,2,5,10...

  • 【python算法书】硬币找零问题?

    题目:窝窝要去商店买棒棒糖,她怎么样才能用最少个数的硬币买到心仪的糖果呢? 分析:找零问题的贪心算法求解。为了满足...

  • 最小硬币找零问题

    最小硬币找零问题是硬币找零问题的一个变种。硬币找零问题是给出要找零的钱数,以及可以用的硬币面额d1...dn及其数...

  • (三) 贪心算法

    # 引例 —— 钱币找零问题 贪心算法的思想非常简单且算法效率很高,在一些问题的解决上有着明显的优势。 假设有3种...

  • 零钱找零

    零钱找零问题,题目是这样的 例如: 解决这样的问题,可以使用到的方法有贪心算法、暴力递归或lookback、动态规...

  • Java硬币找零问题

    假如有硬币1,3,5如何用最少的硬币数量找回11元,硬币可复用 要得到1元需要的硬币个数n=f(1) = f(0)...

  • 动态规划算法

    要点 简化问题 减少计算量 套路 定义状态 定义动作 定义边界 缓存已知 硬币找零问题 问题:有三种面值硬币1,3...

  • 硬币找零问题——动态规划

    问题阐述 给定一些面值的硬币(数量不限)和需要找零的金额,求一个找零所需硬币数最少的方案。现实生活中因其面值的特殊...

  • 【算法打卡60天】Day29贪心算法:如何用贪心算法实现Huff

    Day29学习内容 :贪心算法:如何用贪心算法实现Huffman压缩编码? 1.如何理解贪心算法?贪心算法解决问题...

网友评论

      本文标题:贪心算法(硬币找零问题)

      本文链接:https://www.haomeiwen.com/subject/qfymoqtx.html