leetcode 3183. 达到总和的方法数量

题目如下

数据范围

复制代码
本题是混合背包问题,但是我们可以把两个限定数量的硬币放到后面什么意思呢?
1 2 6是随便用的我们可以利用上楼梯的思想先把不用4的数量算出来随后把4和8即1个4和2个4当做0/1背包来做。

通过代码

cpp 复制代码
class Solution {
public:
    int numberOfWays(int n) {
        vector<int> dp(n + 1, 0);
        vector<int> co = {1, 2, 6};
        int mod = 1e9 + 7;
        dp[0] = 1;
        for (int i = 0; i < 3; i++) {
            for (int j = 1; j <= n; j++) {
                if(j >= co[i])
                    dp[j] = (dp[j] + dp[j - co[i]]) % mod;
                
            }
        }
        int ans = dp[n];
        if(n >= 4)ans = (ans + dp[n - 4]) % mod;
        if(n >= 8)ans = (ans + dp[n - 8]) % mod;
        return ans;
    }
};
相关推荐
1000世界小札6 小时前
《大话数据结构》第9章精读:归并排序与快速排序完整 C++ 实现
数据结构·c++·算法
2601_956121978 小时前
背包基础篇(01、完全、分组、多重、混合)
c++·算法·动态规划
fpcc9 小时前
跟我学C++中级篇——编译期的条件选择
开发语言·c++
兴通物联科技9 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
月华路12 小时前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法
我想走路带风12 小时前
LRU和最长前缀和(计算机网络算法)
计算机网络·算法
M78佐菲12 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
ShineWinsu13 小时前
对于C++:C++20中线程、初始化、Lambda与内存视图等特性的解析
c++·c++20
徐小夕14 小时前
表格、文档、甘特、大屏、表单一站打通:pxcharts超级表格4.0正式上线!
前端·算法·github