(动态规划 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 可以让溢出不报错
        // 对于溢出的数据,不会影响答案的正确性(题目保证)
    }
};
相关推荐
Тиё Сиротака1 天前
红包分配算法的严格数学理论与完整实现
算法
potato_may1 天前
链式二叉树 —— 用指针构建的树形世界
c语言·数据结构·算法·链表·二叉树
java修仙传1 天前
每日一题,力扣560. 和为 K 的子数组
算法·leetcode
ada7_1 天前
LeetCode(python)——148.排序链表
python·算法·leetcode·链表
点云SLAM1 天前
点云配准算法之-Voxelized GICP(VGICP)算法
算法·机器人·gpu·slam·点云配准·vgicp算法·gicp算法
资深web全栈开发1 天前
LeetCode 3625. 统计梯形的数目 II
算法·leetcode·组合数学
橘颂TA1 天前
【剑斩OFFER】算法的暴力美学——外观数列
算法·leetcode·职场和发展·结构与算法
Liangwei Lin1 天前
洛谷 P1434 [SHOI2002] 滑雪
算法
c#上位机1 天前
halcon图像增强之自动灰度拉伸
图像处理·算法·c#·halcon·图像增强
rit84324991 天前
压缩感知信号恢复算法:OMP与CoSaMP对比分析
数据库·人工智能·算法