硬币划分

Posted djf666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬币划分相关的知识,希望对你有一定的参考价值。

硬币划分

有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

 

以上是关于硬币划分的主要内容,如果未能解决你的问题,请参考以下文章

硬币划分

算法题LeetCode-硬币划分问题-(动态规划斜率优化空间压缩)

算法题LeetCode-硬币划分问题-(动态规划斜率优化空间压缩)

算法题LeetCode-硬币划分问题-(动态规划斜率优化空间压缩)

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

如何使用 xcode 将快照划分为多个片段,以便让用户与每个片段进行交互?