(动态规划 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 可以让溢出不报错
        // 对于溢出的数据,不会影响答案的正确性(题目保证)
    }
};
相关推荐
会员源码网10 分钟前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing1 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader2 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱4 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng8976 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮17 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者2 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶