硬币划分

  • 热度指数:1598 时间限制:1秒 空间限制:65536K
  • 算法知识视频讲解

有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n <= 100000),有多少中组合可以组成n分钱?

输入描述:
输入整数n.(1<=n<=100000)
输出描述:
输出组合数,答案对1e9+7取模。

示例1

输入

13

输出

16

通俗的讲下:  举个例子:{1,2,5,10},当1 2 遍历完后 那么开始遍历5时整个dp数组已经完成了对仅对1 2进行分配的种类,但并没有开始以5开始,比如7,当遍历完1 2之后dp[7]存储的就是以 1 2 分进行分配的种类,开始进行以5分配时 开始以5为跨度(7-5=2)找到dp[2](此时2这个位置已经完成了1 2分配)那么7这个位置只需要再添加上dp[2]+1(这个1的意思就是2的分配种类数再加上2 5(2+5=7)这个分类)即是7的种类数同理可以想象下12等等后面的数就不难了。附个证明链接:https://www.cnblogs.com/wuxie0ne/p/11603807.html

 1 #include<bits/stdc++.h>
 2 #include<algorithm>
 3 using namespace std;
 4 const long long mod=1e9+7;
 5 int main()
 6 {
 7     long long n;
 8     scanf("%lld",&n);
 9     long long num[4]={1,2,5,10};
10     long long dp[100010];
11     memset(dp,0,sizeof(dp));
12     dp[0]=1;
13     for(int j=0;j<4;j++){
14         for(int i=num[j];i<=n;i++){
15             dp[i]=(dp[i]+dp[i-num[j]])%mod;
16         }
17     }
18     printf("%lld", dp[n]);
19     return 0;
20 }

answer

原文地址:https://www.cnblogs.com/djf666/p/11774423.html

时间: 2024-08-01 21:24:56

硬币划分的相关文章

笔试题:硬币划分

硬币划分 问题描述: 有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n <= 100000),有多少中组合可以组成n分钱? 思路分析: 穷举法 int countWays(int n) { int count = 1; // 全用1分的情况 for(int a1 = 0; a1 < n/10; a1++) { int b1 = 10 * a1; for(int a2 = 0; a2 <= n/5; a2++) { int b2 = 5* a2; for(int a3=

小白书关于动态规划

10192 最长公共子序列 http://uva.onlinejudge.org/index.php?option=com_onlinejudge& Itemid=8&page=show_problem&category=114&problem=1133&mosmsg= Submission+received+with+ID+13297616 */ #include <cstdio> #include <string.h> #include&

【数据结构】分治算法求解假硬币问题

问题描述: 概念 分治算法的基本思想是将一个大的复杂的问题分解成多个小的.容易解决的问题,通过解决这些小问题进而解决这个大问题. 使用分治算法需要待求解问题能够简化为若干个小规模的相同的问题,通过逐步划分,达到一个易于求解的阶段,而直接进行求解,在程序中可以使用递归方法来进行求解. 哈哈,说起来很抽象,举个例子就好理解了. 一个袋子里有n个硬币,其中一枚是假币,并且假币和真币一模一样,仅凭肉眼无法区分,仅知道假币比真币轻一些,请问如何查找到假币? 分治算法: 我们可以这样做: 将这n个硬币分成两

关于等价类划分和因果图练习题

一.等价类划分: 例:一个输入框,允许1到6个英文字符或数字,按OK结束. 有效等价类: 长度:1到6 字符:a-z,A-Z,0-9 无效等价类 长度:0,7 字符:英文/数字以外字符,控制字符,标点符号 由上可知: 输入 有效等价类 无效等价类 用户名 长度为1至6位 由字符(a-z.A-Z)和数字(0-9)组成 长度>6 空 空格 控制字符 标点符号 测试用例: 编号 用户名 预期输出 1 User01 正常 2 user 错误输出 3 User00011111 错误输出 4   错误输出

BZOJ 1411&amp;&amp;Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】

1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 897  Solved: 394[Submit][Status][Discuss] Description Orez很喜欢玩游戏,他最近发明了一款硬币游戏.他在桌子的边缘上划分出2*n个位置并按顺时针把它们标号为1,2,……,2n,然后把n个硬币放在标号为奇数的位置上.接下来每次按如下操作:在任意两个硬币之间放上一个硬币,然后将原来的硬币拿走:所放硬币的正反面

13- 整数划分插入乘号积最大(四)

/*                                            整数划分(四)时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积 输入    第

栅格重分类和条件函数均可以实现对流量统计数据进行定义划分

ArcGIS水分分析工具的流向分析是基于D8单流向算法,如果分析使用的DEM存在凹陷点,就会产生汇,导致径流断流从而影响了分析结果.在前面章节<ArcGIS水文分析实战教程(2)ArcGIS水文分析工具的基本原理>中又介绍过D8算法,而<ArcGIS水文分析实战教程(4)地形预处理>章节中笔者也较少过如何创建无凹陷点得DEM数据,在使用流向分析工具之前可以先行阅读. 首先流向分析要使用填洼过的数据,确保DEM数据没有凹陷点.如果数据准备妥当,直接使用水文分析工具箱中的[流向]工具进

划分子网 子网分组转发算法

1.从两级IP地址到三级IP地址现在随着因特网的普及和技术的发展,早期ARPANET的设计之缺陷显露无疑:(1)IP地址空间的利用率有时会很低:一个A类IP地址网络可连接超过1000万台主机,而每个B类IP地址网络可连接超过6万台.可是有些网络对连接在网络上的主机数有限制,甚至远小于这样的数量.(2)给每个物理网络分配一个网络号会使路由表变得庞大臃肿,降低网络性能.(3)两级IP地址不够灵活:只能在申请完IP地址后才能进行下一步工作,而无法按自己的需求变更.为了解决这个问题,从1985年起,在I

angularJs项目实战!01:模块划分和目录组织

近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap + D3 + requirejs 的架构来实现它.angularjs早在去年6月份我就有所接触,将它应用在实验室项目的个别页面中,11月份在新浪的时候也将其推荐给了所在云事业部项目组.项目组老大程辉等人都是很有技术敏感性的人,大胆地采纳了我的建议,将之应用于原本使用dojo开发的项目前端模块上.然