【动态规划专栏】动态规划:似包非包---不同的二叉树

简介: 【动态规划专栏】动态规划:似包非包---不同的二叉树


题目来源

本题来源为:

Leetcode377. 组合总和 Ⅳ

题目描述

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

算法原理

1.状态表示

根据问题分析,分析出重复子问题

经验+题目要求

对于本题而言就是:

dp[i]表示:凑成总和为i,一共有多少种排列数

2.状态转移方程

因此状态方程为:

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

3.初始化

dp[0]=1

4.填表顺序

从左往右

5.返回值

返回dp[target]

代码实现

动态规划的代码基本就是固定的四步:

1.创建dp表
2.初始化
3.填表
4.返回值

本题完整代码实现:

class Solution 
{
public:
    int combinationSum4(vector<int>& nums, int target) 
    {
        vector<double> dp(target+1);
        dp[0]=1;
        for(int i=1;i<=target;i++)
        {
            for(auto x:nums)
                if(i>=x)
                    dp[i]+=dp[i-x];
        }
        return dp[target];
    }
};
相关文章
|
6月前
|
算法
【动态规划专栏】动态规划:卡特兰数---不同的二叉树
【动态规划专栏】动态规划:卡特兰数---不同的二叉树
70 0
|
5月前
|
存储 算法
数据结构与算法之动态规划--旷工问题
数据结构与算法之动态规划--旷工问题
54 1
|
6月前
动态规划——OJ题(一)
动态规划——OJ题(一)
64 1
|
6月前
【Leetcode 5】最长回文字串 —— 动态规划
我们可以使用动态规划解决本题,解题思路: 1. 状态定义:`dp[l][r]`表示起点为i,终点为j的字串是否回文串 2. 状态转移方程:`dp[l][r] = dp[l + 1][r - 1] && char[l] == char[r]`,即dp[l + 1][r - 1]为回文串且i和j的字符相同
蓝桥杯备赛leetcode 70.爬楼梯,用最经典的题目来讲解动态规划
题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼梯顶部呢?
蓝桥杯备赛leetcode 70.爬楼梯,用最经典的题目来讲解动态规划
|
存储 JavaScript 算法
动态规划进阶——LeetCode53. 最大子数组的和
当遇到的元素nums[i]之前的连续数组和的最大值dp[i-1]为负数时,则不要将现在的这个数加到dp[i-1]上,因为不知道现在的这个数nums[i]是正还是负,如果盲目加上,只会无法判断其最大子数组的和,故 dp[i-1] < 0时,dp[i] = nums[i]
104 0
动态规划进阶——LeetCode53. 最大子数组的和
|
算法
动态规划从入门到LeetCode
动态规划从入门到LeetCode
91 0
|
人工智能 算法 BI
蓝桥杯第十讲--贪心【习题】
蓝桥杯第十讲--贪心【习题】
220 0
蓝桥杯第十讲--贪心【习题】