LeetCode121:买卖股票的最佳时机(二维dp)
题目描述: 方法1:二维dp动态规划 dp[i][0],表示第i天拥有股票最大收益 dp[i][1],表示第i天没有股票最大收益 dp[i][0] = max(dp[i-1][0], -price[i]) 第i-1天就持有股票,那么就保持现状 第i天买入股票 dp[i][1] = max(dp[i-
题目描述: 方法1:二维dp动态规划 dp[i][0],表示第i天拥有股票最大收益 dp[i][1],表示第i天没有股票最大收益 dp[i][0] = max(dp[i-1][0], -price[i]) 第i-1天就持有股票,那么就保持现状 第i天买入股票 dp[i][1] = max(dp[i-
题目描述: 方法1:排列形式的完全背包问题 class Solution { public: int combinationSum4(vector<int>& nums, int target) { vector<int>dp(target+1,0); dp[
题目描述: 零钱兑换Ⅰ中,所求为凑满总金额需要最少的硬币个数 类似于目标和那道题,只不过那题是01背包问题(遍历顺序为从后往前),这题为完全背包问题 方法1:完全背包问题 本题和纯完全背包问题不同,纯完全背包考虑的是最大价值,所以不用管遍历顺序,本题是求装满的方式总数,得考虑题目要求是排列数还是组合
特点:01背包同一物品只能取一次,完全背包同一物品可以取多次 题目描述: 方法1:二维dp 与01背包不同点: dp数组第一行初始化时不同 递推时,放物品i时处理情况不同,dp[i - 1][j - weight[i]] + value[i]变为dp[i][j - weight[i]] + valu
题目描述: 方法1:回溯 class Solution { public: bool backtrack(string s,unordered_set<string> words,int StartIndex){//从StartIndex开始截取 if(StartIndex
题目描述: 方法1:回溯 class Solution { public: vector<string> data; vector<vector<string>> result; int Slength;//初始字符串长度,用于判断是否遍历完初始s //判断一个字符
题目描述: 难点:集合(数组candidates)有重复元素,但还不能有重复的组合 方法1:回溯 class Solution { public: vector<vector<int>> result; vector<int> data; void backtrack(vec
题目描述: 方法1:回溯 class Solution { public: vector<vector<int>> result; vector<int> data; void backtrack(vector<int>& candidates,int target,int
题目描述: 方法1:回溯 class Solution { public: vector<string> result; string data; string words[8] = { "abc", "def", "ghi",
题目描述: 方法1:回溯,注(for循环中,回溯时,记得加上sum -= i) class Solution { public: vector<int> data; vector<vector<int>> result; void backtrack(int n,int k