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;
    }
};
相关推荐
明月醉窗台7 分钟前
Qt 入门 6 之布局管理
c语言·开发语言·c++·qt
海底火旺10 分钟前
寻找缺失的最小正整数:从暴力到最优的算法演进
javascript·算法·面试
优美的赫蒂13 分钟前
理解欧拉公式
线性代数·算法·数学建模
云小逸23 分钟前
【C++】继承
开发语言·c++
Pasregret28 分钟前
策略模式:动态切换算法的设计智慧
算法·bash·策略模式
努力学习的小廉1 小时前
【C++】 —— 笔试刷题day_21
开发语言·c++·算法
YuforiaCode1 小时前
第十四届蓝桥杯 2023 C/C++组 冶炼金属
c语言·c++·蓝桥杯
周杰伦_Jay1 小时前
continue插件实现IDEA接入本地离线部署的deepseek等大模型
java·数据结构·ide·人工智能·算法·数据挖掘·intellij-idea
江沉晚呤时1 小时前
深入了解递归、堆与栈:C#中的内存管理与函数调用
java·jvm·算法
愚润求学2 小时前
【专题刷题】二分查找(一):深度解刨二分思想和二分模板
开发语言·c++·笔记·leetcode·刷题