(动态规划 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 可以让溢出不报错
        // 对于溢出的数据,不会影响答案的正确性(题目保证)
    }
};
相关推荐
半盏茶香13 分钟前
启航数据结构算法之雅舟,悠游C++秘境——单链表之美妙构筑
数据结构·c++·算法
小林熬夜学编程32 分钟前
【MySQL】第二弹---数据库基础全解析:从概念到实践的深度探索
linux·开发语言·数据库·mysql·算法
中东大鹅1 小时前
【排序算法】选择排序
数据结构·算法·排序算法
九亿AI算法优化工作室&2 小时前
【SOC估计】基于扩展卡尔曼滤波器实现锂离子电池充电状态估计matlab代码和报告
开发语言·人工智能·算法·matlab·数据挖掘·回归
皎味小行家2 小时前
第四十六天|动态规划|子序列|647. 回文子串,5.最长回文子串, 516.最长回文子序列,动态规划总结篇
java·数据结构·算法·leetcode·动态规划
中东大鹅3 小时前
【排序算法】桶排序
算法·排序算法
E_han3 小时前
7.list
开发语言·汇编·数据结构·c++·算法·list
qystca4 小时前
链式前向星复习图论
算法·深度优先·图论
无限码力5 小时前
最大矩阵的和
数据结构·算法·华为od·笔试·华为od e卷真题