/*日期:2011-10-21
作者:xiaosi
题目: 最少硬币问题
*/
问题描述:
设有n 种不同面值的硬币,各硬币的面值存于数组T〔1:n〕中。现要用这些面值的硬
币来找钱。可以使用的各种面值的硬币个数存于数组Coins〔1:n〕中。
对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法。
?编程任务:
对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组Coins,
以及钱数m,0≤m≤20001,编程计算找钱m的最少硬币数。
?数据输入:
由文件input.txt 提供输入数据,文件的第一行中只有1 个整数给出n的值,第2 行起每
行2 个数,分别是T[j]和Coins[j]。最后1 行是要找的钱数m。
?结果输出:
程序运行结束时,将计算出的最少硬币数输出到文件output.txt中。问题无解时输出-1。
输入文件示例 输出文件示例
input3
1 3
2 3
5 3
18
output
5
#include<iostream>
using namespace std;
int main()
{
int n,i,m,t,v;
cin>>n;
int *value=new int [n+1],*value1=new int [n+1];
int *q=new int [n+1];
for(i=1;i<=n;i++)
{ cin>>value[i]>>q[i];
value1[i]=value[i]*q[i];}
cin>>m;
int *way=new int [m+1];
int *way1=new int [m+1];
way1[0]=way[0]=0;
for(i=1;i<=m;i++)
{
if(value1[1]>=i&&i%value[1]==0)
way1[i]=way[i]=i/value[1];
else
way1[i]=way[i]=0;
}
int j;
for(j=2;j<=n;j++)
{
for(i=value[j];i<=m;i++)
{
t=1;
while(t<=q[j]&&value[j]*t<=i)
{
if((i-value[j]*t)&&way[i-value[j]*t]==0)
{ t++;
continue;}
else
v=t+way[i-value[j]*t];
if(way1[i]==0||way1[i]>v)
way1[i]=v;
t++;
}
}
for(i=1;i<=m;i++)
{ way[i]=way1[i];
}
}
if(way[m]==0)
way[m]=-1;
cout<<way[m]<<endl;
return 0;
}
分享到:
相关推荐
### 动态规划解决最少硬币问题 #### 知识点概述 - **最少硬币问题**:给定一组面额不同的硬币以及一个总金额,目标是使用最少数量的硬币来凑出该总金额。 - **动态规划**:一种解决多阶段决策过程最优化问题的方法...
### 动态规划——最少硬币问题解析 #### 一、背景介绍 在计算机科学领域,动态规划(Dynamic Programming)是一种高效求解多阶段决策问题的方法。它通过将原问题分解为相互重叠的子问题,并自底向上或自顶向下地...
《算法分析与设计:最少硬币问题》 在计算机科学中,算法是解决问题的核心,而设计高效的算法则是提升程序性能的关键。本主题聚焦于“最少硬币问题”,这是一个经典的动态规划问题,通常出现在编程竞赛或者面试中。...
### 算法设计与分析:最少硬币问题解析 #### 问题背景 在实际生活中,我们经常需要解决“找零”问题,即如何用最少数量的硬币组合成一个特定金额的问题。这类问题通常可以通过动态规划算法进行高效求解。本篇文章...
设计算法求解最少硬币问题,并编程实现,超市找零钱时,找钱数最少的方法
算法分析 关于动态规划的最少硬币问题的代码,
最少零钱问题,最少硬币问题,动态规划算法,找零钱问题,
贪心算法求解最少硬币问题C语言程序,问题描述:给顾客找零钱时,收银处有1元,5角和1角硬币若干,如何用最少数量的硬币找够零钱? 算法思想:比如要找给顾客2元9角钱,首先计算1元最多可以有多少枚,即2枚,减去2元,还...
【最少硬币问题】是一种经典的动态规划问题,它在计算机科学和算法分析中具有重要的地位。此问题的主要目标是找出用最少数量的硬币来组成指定的金额,这些硬币有多种不同的面值。在给出的题目中,我们被提供了硬币的...
对于任意钱数,设计一个用最少硬币找钱的方法 数据输入:由文件input.txt提供输入数据,文件的第一行中只有一个整数给出n的值,第二行起每行2个数,分别是T[j]和cion[j].最后一行是要找的钱数m。 解题思路:可以...
最少硬币问题.note
最少硬币问题 动态规划动态规划动态规划动态规划动态规划v
1. 最少硬币问题:这个问题是动态规划的经典实例,旨在找到最小数量的硬币来组成一个给定的金额。通过自底向上的方式,我们可以构建一个状态转移方程,以确定每种金额的最小硬币组合。这有助于理解动态规划的基本...
### 贪心算法在最少硬币找零问题中的应用 #### 一、问题背景及定义 在实际生活中,我们经常遇到需要找零的情况。如何用最少数量的硬币完成找零?这个问题不仅关乎日常生活中的便利性,也是计算机科学领域内一个...
用动规实现最少硬币问题 #include #include using namespace std; int n,m; int coins[10],T[10]; int f[20002]; int LeastCoin(int n,int m) { for(int i=0;i;i++) f[i]=i+1; //初始化f数组 f[0]=0; for(int ...
本算法通过动态规划的方式解决最少硬币找零问题,不仅确保了算法的时间效率,还提供了最优解。 #### 问题描述 假设我们有 _n_ 种不同面值的硬币,每种硬币的面值分别存储在数组 _T_[1:_n_] 中。现在我们需要使用...
设有n 种不同面值的硬币,各硬币的面值存于数组T[1:n]中。...对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组Coins,以及钱数m,0≤m≤20001,编程计算找钱m的最少硬币数。