(动态规划 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 可以让溢出不报错
        // 对于溢出的数据,不会影响答案的正确性(题目保证)
    }
};
相关推荐
RTC老炮3 分钟前
webrtc弱网-BBRv2算法原理
网络·算法·webrtc
RTC老炮3 分钟前
webrtc弱网-BBRv1算法原理
网络·算法·webrtc
MobotStone1 小时前
我的 AI 代码清理方法论:从原型到生产,只需 5 步
算法·程序员·架构
沐苏瑶8 小时前
Java 搜索型数据结构全解:二叉搜索树、Map/Set 体系与哈希表
java·数据结构·算法
ZoeJoy89 小时前
算法筑基(二):搜索算法——从线性查找到图搜索,精准定位数据
算法·哈希算法·图搜索算法
Alicx.9 小时前
dfs由易到难
算法·蓝桥杯·宽度优先
_日拱一卒10 小时前
LeetCode:找到字符串中的所有字母异位词
算法·leetcode
云泽80810 小时前
深入 AVL 树:原理剖析、旋转算法与性能评估
数据结构·c++·算法
Wilber的技术分享11 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
邪神与厨二病11 小时前
Problem L. ZZUPC
c++·数学·算法·前缀和