`
madbluesky
  • 浏览: 84023 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最少硬币数问题

阅读更多
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * c1...cn个硬币,面值各不相同,现要用最少的硬币数,使得钱数为k,给出方案
 * @author sky
 *
 * 设dp[i]为k为i时,最少需要的硬币个数
 * dp[0]=1
   dp[i] = min(dp[i-cons[j]])+1
 */

public class MinIcons {
	private List<Integer> cn;
	private Integer k;
	public MinIcons(List<Integer> cn, int k){
		this.cn = cn;
		this.k = k;
	}
	public int getMinIconNumber(){
		Map<Integer,Integer> dp = new HashMap<Integer, Integer>();
		dp.put(0, 0);
		for(int i=1; i<=k;i++) {
			int tmp = i;
			for(int j=0;j<cn.size();j++){
				if(i >= cn.get(j)) {
					tmp = min(tmp,dp.get(i-cn.get(j))+1);
				}
			}
			dp.put(i,tmp);
		}
		return dp.get(this.k);
	}
	public int min(int x, int y){
		if(x>y) {
			return y;
		}
		return x;
	}
	public static void main(String[] args) {
		List<Integer> l = new ArrayList<Integer>();
		l.add(1);
		l.add(2);
		l.add(5);
		System.out.print(new MinIcons(l,103).getMinIconNumber());
	}
}
分享到:
评论
1 楼 riching 2013-03-20  
    static int calcMinCoins(int money, List<Integer> coins) {
        if (money <= 0) {
            return 0;
        }
        int total = money;
        Collections.sort(coins);
        int count = 0;
        for (int i = coins.size() - 1; i >= 0; i--) {
            int coin = coins.get(i);
            count += total / coin;
            int left = total % coin;
            if (left == 0) {
                break;
            }
            total = left;
        }
        return count;
    }

相关推荐

    最少硬币问题 王晓东版

    对于任意钱数,设计一个用最少硬币找钱的方法 数据输入:由文件input.txt提供输入数据,文件的第一行中只有一个整数给出n的值,第二行起每行2个数,分别是T[j]和cion[j].最后一行是要找的钱数m。 解题思路:可以...

    算法分析与设计 最少硬币问题

    在这个问题中,状态可以表示为d[i],代表找零i元时所需的最少硬币数。初始状态d[0]为0,因为不需要任何硬币找零0元。 接下来,我们可以使用动态规划的思想来构建解决方案。动态规划的核心是将大问题分解为小问题,...

    动态规划-最少硬币问题

    4. **返回结果**:最后返回dp[n]即为凑成金额n所需的最少硬币数。 #### 五、代码详解 给出的代码实现了一个基于动态规划的解决方案来解决最少硬币问题。下面是代码的关键部分的详细解释: 1. **预处理**: ```...

    最少零钱问题,最少硬币问题

    最少零钱问题,最少硬币问题,动态规划算法,找零钱问题,

    最少硬币问题

    对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组Coins,以及钱数m,0≤m≤20001,编程计算找钱m的最少硬币数。 数据输入: 第一行中只有1 个整数给出n的值,第2 行起每行2 个数,分别是T[j]和...

    动态规划解最少硬币问题

    ### 动态规划解决最少硬币问题 #### 知识点概述 - **最少硬币问题**:给定一组面额不同的硬币以及一个总金额,目标是使用最少数量的硬币来凑出该总金额。 - **动态规划**:一种解决多阶段决策过程最优化问题的方法...

    贪心算法——最少硬币找钱

    ### 贪心算法在最少硬币找零问题中的应用 #### 一、问题背景及定义 在实际生活中,我们经常遇到需要找零的情况。如何用最少数量的硬币完成找零?这个问题不仅关乎日常生活中的便利性,也是计算机科学领域内一个...

    最少硬币问题 动态规划法

    设计算法求解最少硬币问题,并编程实现,超市找零钱时,找钱数最少的方法

    最少硬币问题动态规划

    算法分析 关于动态规划的最少硬币问题的代码,

    算法设计与分析-最少硬币问题

    通过定义 `Coin` 结构体存储每种硬币的信息,利用动态规划方法求解最少硬币数,最终输出结果。此外,还包含了文件读取等辅助功能,使其能够在特定环境中运行。 通过以上分析,我们不仅理解了最少硬币问题的本质及其...

    用贪心算法实现购物找零(支付+找零使用最少硬币数)

    在1次购物中希望使用最少硬币个数。例如,1次购物需要付款0.55元,没有5角的硬币,只好用2*20+10+5共4枚硬币来付款。如果付出1元,找回4角5分,同样需要4枚硬币。但是如果付出1.05元(1枚1元和1枚5分),找回5角,只...

    算法最少硬币问题题目

    - 设 `dp[i]` 为找零 `i` 面额所需的最少硬币数。 - 对于每一种硬币面值 `t`(`t` 在 `T` 中),我们考虑用 `Coins[t]` 个这样的硬币来找零,如果 `t ,则可以尝试使用这些硬币。 - 如果我们能用 `dp[i - t] + 1` 个...

    C语言贪心算法求解最少硬币问题源程序.zip

    贪心算法求解最少硬币问题C语言程序,问题描述:给顾客找零钱时,收银处有1元,5角和1角硬币若干,如何用最少数量的硬币找够零钱? 算法思想:比如要找给顾客2元9角钱,首先计算1元最多可以有多少枚,即2枚,减去2元,还...

    最少硬币找零算法

    - 使用 _T_[1] = 1 面值的硬币,可以构成任意金额,但我们需要寻找最少硬币数的方案。 - 使用 _T_[2] = 5 面值的硬币,可以考虑使用两枚硬币完成找零(5 + 5),或者一枚 5 面值加五枚 1 面值的硬币。 - 使用 _T_...

    最少硬币问题.note

    最少硬币问题.note

    最少硬币问题 动态规划

    最少硬币问题 动态规划动态规划动态规划动态规划动态规划v

    贪心算法硬币问题_硬币问题_贪心算法硬币_

    这个问题通常描述为:给定不同面额的硬币,如1元、5元、10元等,目标是用最少的硬币数量凑出指定的总金额。我们可以从以下几个方面详细探讨这个问题: 1. **问题定义**:硬币问题的核心在于寻找最小硬币组合来达成...

    硬币兑换问题的动态规划求解算法

    其中,c[i][j] 表示使用前 i 种硬币面值来兑换金额 j 的最少硬币数量。 为了计算出最优的兑换方案,我们可以使用动态规划的思想来解决这个问题。首先,我们初始化一个二维数组 c,用于存储每种硬币面值下的最少硬币...

    最少硬币算法

    如果使用了这种面值的硬币,那么问题转化为凑足金额`j`所需的最少硬币数加上1(即使用了一枚这种面值的硬币)。如果这种方法得到的硬币数比已有的少,则更新状态数组`c[j+T[i]]`的值。 #### 三、算法设计与实现 ...

Global site tag (gtag.js) - Google Analytics