1101 换零钱 
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题

 收藏
 关注

N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。

例如:5分钱换为零钱,有以下4种换法:
1、5个1分
2、1个2分3个1分
3、2个2分1个1分
4、1个5分
(由于结果可能会很大,输出Mod 10^9 + 7的结果)

Input
输入1个数N,N = 100表示1元钱。(1 <= N <= 100000)
Output
输出Mod 10^9 + 7的结果
Input示例
5
Output示例
4

【代码】:

#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<stack>
#include<algorithm>
#define maxn 105
#define maxm 50005
#define INF 0x3f3f3f3f
#define ll long long
#define MOD 1000000007
using namespace std;
/*
每件物品无穷多个!
它的实际意义:依次取出可用硬币集合中的每一种硬币,例如当前取出的硬币为3元硬币,设val(i)为凑成i元的方法数,则val(i)自然要增加val(i-3),因为3元硬币的存在,所有能凑成(i-3)元的方法都可通过增加一枚3元硬币而凑成i元。
*/
int w[13]={1,2,5,10,20,50,100,200,500,1000,2000,5000,10000};
int v[7]={1,2,5,10,20,50};
int d[110000];int main()
{int n,c;scanf("%d",&n);d[0]=1;for(int i=0;i<13;i++)for(int j=w[i];j<=n;j++)d[j]=(d[j]+d[j-w[i]])%MOD;printf("%d\n",d[n]);
}
/*
dp[i][j]:
1. 保持金额不变, 减少货币种数
2. 保持货币种数,减少金额大小
if(i>=j)    dp[i][j] = dp[i][j-1] + dp[i-j][j]
if(i<j)     dp[i][j] = dp[i][i];
对于能影响兑换种数多少存在2个变量,
第一个是货币种数,第二个是金额多少, 所以递归向着2个方面进行,
1. 保持金额不变, 减少货币种数
2. 保持货币种数,减少金额大小.
所以形成了2叉树.
这是离散的情况, 在微积分中我们也可以看到例子,
对于有2个变量函数进行微分,做偏微分时,
先保持第一个变量,对第二个变量求导,再保持第二个变量,对第一个变量求导.dp[i](i为硬币的币值,即 1 <= i <= N) 中 当coins[j]( 1 <= j <= 13)(放进去 + 不放进去)两种场景的和
好比,coins[] = {1, 2, 5}   dp[2]有两种方案,
dp[2][0] = dp[1][0] = 1;
dp[2][1] = dp[0][2](直接选择一枚2分硬币的结果) + dp[1][0](2个1分硬币的结果) = 2
dp[2][2] = 0 + dp[2][1] = 2 (因为价值为5的硬币放不进去,所以只能选择不放)
PS: MOD = (10^9 + 7)  每步的结果都要MOD一下 >.<
*/

转载于:https://www.cnblogs.com/Roni-i/p/8953409.html

51nod 1101 换零钱 【完全背包变形/无限件可取】相关推荐

  1. 51nod 1101 换零钱 完全背包的变型 动态规划

    题目: 思路: for(int i = 0;i < 13; i++){for(int j = a[i];j <= n; j++){dp[j] = (dp[j] + dp[j-a[i]])% ...

  2. 51nod 1101 换零钱 简单dp

    题意:问在现有面值金额下 输入一个m可以由多少种不同的金额组成 那么可以定义dp[i]表示i金额由多少种不同的金额组成方式 转移方程:dp[i] = (dp[i] + dp[i-cost[j])%mo ...

  3. 51Nod-1101 换零钱【0/1背包+DP】

    1101 换零钱 基准时间限制:1秒 空间限制:131072KB 分值:20难度:3级算法题 N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100 ...

  4. 小P的故事——神奇的换零钱 背包

    小P的故事--神奇的换零钱 题目描述 已知A国经济很落后,他们只有1.2.3元三种面值的硬币,有一天小P要去A国旅行,想换一些零钱,小P很想知道将钱N兑换成硬币有很多种兑法,但是可惜的是他的数学竟然是 ...

  5. SDUTOJ 2777 小P的故事——神奇的换零钱 背包

    小P的故事--神奇的换零钱 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 已知A国经济很落后,他们只有1.2.3元三种面值的硬币 ...

  6. 换零钱程序c语言,《SICP》换零钱的递归法与迭代法

    咳咳..先说一段废话.. 最近开始看SICP这本书,正看到了换零钱的部分.看到里面那么多简明生动的例子,还有作者的细心讲解,真是唤起了对学习的无限激情.之前也看过王垠的一些文章,提到了诸如Lisp.s ...

  7. java零钱换整程序_贪心算法换零钱(java)

    贪心算法思想 贪心算法总是做出在当前看来做好的选择.也就是说贪心算法并不从整体最后考虑,他做出的选择只是局部最优选择.他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解, ...

  8. codeforce Gym 101102A Coins (01背包变形)

    01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...

  9. java零钱换整程序_透析递归应用-换零钱

    题目源于<SICP>,这里做一下调整,如下: 给了面值为50元.20元.10元.5元.1元的五种零钱若干,思考把面值100元人民币换成零钱一共有多少种方式? SICP给出的递归算法思想如下 ...

最新文章

  1. 智能文档理解:通用文档预训练模型
  2. Docker操作命令详解
  3. GDCM:提取DICOM文件数据元素值字段的测试程序
  4. 【计算机系统设计】学习笔记(1)03,04
  5. android thread实例
  6. Mybatis中的动态SQL记录
  7. Python机器学习:多项式回归与模型泛化003过拟合与欠拟合
  8. 进程与服务的签名_服务器被黑客攻击后如何查找溯源攻击
  9. SQL基础笔试题--(一)
  10. Learn Linux The Hard Way — LinuxTOY
  11. C#事件-经典小例子
  12. Wi-Fi:802.11ac new feature Beamforming
  13. 机器学习入门09 - 特征组合 (Feature Crosses)
  14. 嵌入式--串口、RS232、RS485通信
  15. 几何图形及计算公式查询
  16. 华为认证有什么地方可以学习考取?
  17. 网络云存储技术Windows server 2012 (项目九 存储服务器文件的安全性配置与管理)
  18. c#编写activeX控件详细教程,底部附有下载地址
  19. loadrunner入门篇 - Vuser发生器
  20. 官宣!1024 程序员节日程发布,第一代程序员求伯君将出席大会

热门文章

  1. d. powerful ksenia_DEBON D.D |这才是每个女人应该拥有的
  2. 删除替换字符串中第一次出现的字符串
  3. git eclipse 取消误操作 ignore(忽略)文件
  4. MySQL中时间函数NOW()和SYSDATE()的区别
  5. 微信只显示分享朋友圈和好友  屏蔽其他的分享
  6. Apache发布NetBeans 10.0,增强对JDK 11的支持
  7. curl post file PHP
  8. ubuntu下针对php的thrift 安装折腾记录
  9. 九章基础算法02:栈和队列
  10. python对数字进行简单的可逆加密_Python实现简单的可逆加密程序实例