nyoj995硬币找零(dp)
来源:互联网 发布:java二叉树判断 编辑:程序博客网 时间:2024/05/17 06:37
硬币找零
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
- 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资。我们应该注意到,人民币的硬币系统是 100,50,20,10,5,2,1,0.5,0.2,0.1,0.05,0.02,0.01 元,采用这些硬币我们可以对任何一个工资数用贪心算法求出其最少硬币数。但不幸的是: 我们可能没有这样一种好的硬币系统, 因此用贪心算法不能求出最少的硬币数,甚至有些金钱总数还不能用这些硬币找零。例如,如果硬币系统是 40,30,25 元,那么 37元就不能用这些硬币找零;95 元的最少找零硬币数是 3。又如,硬币系统是 10,7,5,1元,那么 12 元用贪心法得到的硬币数为 3,而最少硬币数是 2。你的任务就是:对于任意的硬币系统和一个金钱数,请你编程求出最少的找零硬币数;如果不能用这些硬币找零,请给出一种找零方法,使剩下的钱最少。
- 输入
- 输入数据:
第 1 行,为 N 和 T,其中 1≤N≤50 为硬币系统中不同硬币数;1≤T≤100000 为需要用硬币找零的总数。
第 2 行为 N 个数值不大于 65535 的正整数,它们是硬币系统中各硬币的面值。
当n,t同时为0时结束。 - 输出
- 输出数据:
如 T 能被硬币系统中的硬币找零,请输出最少的找零硬币数。
如 T 不能被硬币系统中的硬币找零,请输出剩下钱数最少的找零方案中的最少硬币数。 - 样例输入
4 1210 7 5 1
- 样例输出
2
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 0x3f3f3f3fint dp[100005];int w[55];int n,m;void solve(){ for(int i=0;i<n;i++) { for(int j=w[i];j<=m;j++) { dp[j]=min(dp[j],dp[j-w[i]]+1); } } for(int i=m;i>=0;i--) { if(dp[i]!=maxn) { dp[m]=dp[i]; break; } } printf("%d\n",dp[m]);}int main(){ while(scanf("%d%d",&n,&m)!=EOF&&n&&m) { memset(dp,0x3f,sizeof(dp)); dp[0]=0; for(int i=0;i<n;i++) { scanf("%d",&w[i]); } solve(); } return 0;}
0 0
- nyoj995硬币找零(dp)
- NYOJ995硬币找零
- nyoj995硬币找零完全背包
- NYOJ995 硬币找零(完全背包)
- 硬币找零(dp)
- nyoj 硬币找零 995 (DP++技巧)
- NYOJ 995 硬币找零(dp)
- nyoj955硬币找零【dp】
- dp 硬币找零问题
- [DP]FJSDFZOJ 1282 硬币找零
- 【解题报告】uva674_Coin Change(硬币找零, dp, 完全背包)
- 硬币找零-记忆化搜索(DP动态规划)
- nyoj 995硬币找零(dp)递推
- 硬币找零(贪心算法)
- 硬币找零(动态规划)
- 硬币找零问题(Java)
- 硬币找零(完全背包)
- 硬币找零
- namespace的用法
- xmuoj-1482 小海的困惑 词法分析-数据结构实验题
- Android实现推送方式解决方案
- 个人作业
- 从键盘输入时.分.秒(第二章第一题)
- nyoj995硬币找零(dp)
- POJ3216 Repairing Company【二分图最小路径覆盖】【Floyd】
- 小皮助手
- 第12题
- 分享java微信开发视频
- 为什么有时候产品经理不懂技术更好?
- 问:flashbuilder多余的导入会导致自动编译脚本执行报错(错误:找不到定义)? 答:Ctrl+Shift+O 去掉冗余的导入。
- iphone关于单倍图和二倍图(导航 背景 变高)
- 利用xp_cmdshell 导出文件到本地和网络路径。