(动态规划 leetcode377)组合求和IV

确立状态转移方程需要深入理解问题,合理定义子问题,找到边界条件(比如dp[0]),分析状态之间的转移关系(dp和dp之间的关系),并进行验证。

递归是自顶向下,而dp是自下而上

这里是i作为目标值,dp[i]是值在目标值为i的nums的组合数

if(x<=i)//x可以作为组合的数

dp[i]+=dp[i-x];

比如nums={1,3,2}

target=4

i--4的目标值

当目标值为4

dp[4]=dp[3]+dp[1]+dp[2]

4-1=3(dp【3】)

4-1=3(dp【1】)

4-2=2(dp【2】)

cpp 复制代码
class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
       vector<unsigned>dp(target+1,0);
       dp[0]=1;//目标值为0,有一个组合就是不选
       for(int i=1;i<=target;i++)
       for(auto x:nums)
       {
        if(x<=i)//当x小于等于目标值的时候可以进行组合
        dp[i]+=dp[i-x];
       }
       return dp[target];
         // 使用 unsigned 可以让溢出不报错
        // 对于溢出的数据,不会影响答案的正确性(题目保证)
    }
};
相关推荐
倔强的小石头_2 小时前
【C语言指南】函数指针深度解析
java·c语言·算法
Yasin Chen2 小时前
C# Dictionary源码分析
算法·unity·哈希算法
_Coin_-3 小时前
算法训练营DAY27 第八章 贪心算法 part01
算法·贪心算法
董董灿是个攻城狮7 小时前
5分钟搞懂什么是窗口注意力?
算法
Dann Hiroaki7 小时前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
qqxhb9 小时前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择
FirstFrost --sy11 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森11 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
搂鱼11451411 小时前
(倍增)洛谷 P1613 跑路/P4155 国旗计划
算法
Yingye Zhu(HPXXZYY)11 小时前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法