动态规划
tongk手势舞
硕士:福州大学
展开
-
选课问题 (动态规划)
转载:C++剑指offer:树形DP之树上的有依赖性的背包问题——选课题目描述学校实行学分制。每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。 学校开设了 N 门的选修课程,每个学生可选课程的数量 M 是给定的。学生选修了这M门课并考核通过就能获得相应的学分。 在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修。例如《Frontpage》必须在选修了《Windows 操作基础》之后才能选修。我们称《Windows 操作基础》是《转载 2020-10-31 11:26:40 · 2176 阅读 · 0 评论 -
整数划分
思路参考:整数划分_1,整数划分_2做法:dp#include<iostream>#include<iomanip>#include<vector>using namespace std;void visit(vector<vector<int>>& dp){ for (int i = 1; i < dp.size(); i++) { for (int j = 1; j < dp[0].size().原创 2020-10-14 11:11:18 · 219 阅读 · 0 评论 -
c++ 动态规化(数字三角形)
int main(){ int n,t; vector<vector<int>>dp; vector<vector<int>>nums; //int a[maxsize][maxsize] = { //{7}, //{3, 8}, //{8,1,0}, //{2,7,4,4}, //{4,5,2,6,5} //}; w...原创 2020-04-20 17:20:12 · 243 阅读 · 0 评论 -
c++,动态规划(钱币组合问题)
题目:给定不同的硬币coins和一个总金额amount,编写一个函数来计算可以凑成总金额所需的最少硬币的个数,如果没有任何异样硬币组合成总金额,返回-1。输入:coins=[1,2,5],amount=11输出:3;解释:11=5+5+1;输入:coins=[2],amount=3;输出:-1;动态规划:dp[i]代表了总金额为i的最小硬币组合数,dp[i]=-1表示了总...原创 2020-04-15 10:21:37 · 2377 阅读 · 0 评论 -
42.连续子数组的最大和
思想:我们假设动态规划列表为f,f(i)代表以元素nums[i]为结尾的连续子数组最大和。根据题目可得转移方程,当f(i-1)<=0时,则产生负贡献,也就是f(i)=f(i-1)+nums[i]的值没有nums[i]的值大,此时f(i)=nums[i],否则f(i)=f(i-1)+nums[i];class Solution {public: int maxSubArray(v...原创 2020-04-13 18:18:21 · 72 阅读 · 0 评论 -
198.打家劫舍
思想:dp[i]={0,i==0;nums[1],i=1;max(dp[i-1],dp[i-2]+nums[i]),i>=2;}当偷第i家的时候的钱为两个部分:1.可以不偷第i家的,这时候的钱为偷到第i-1家的积累的总钱数。2,偷第i家的,这时候的总钱数为偷到第i-2家的积累的总钱数加上第i家的钱。选择1或2中比较大的数。class Solution {...原创 2020-04-13 17:32:49 · 73 阅读 · 0 评论 -
300,最长上升子序列
思想:首先用dp数组对每个元素初始化为1,因为底线为1,然后进行判断,dp[i]=max(dp[j]+1,dp[i]),其中(0=<j<=i<n),然后用max_记录最长的长度,注意:这个最长上升子序列是不连续的,比如上面的可以【2,3,7,101】,【2,5,7,101】,【2,5,7,18】,【2,3,7,18】class Solution {public:...原创 2020-04-13 16:11:21 · 74 阅读 · 0 评论 -
零钱问题 动态规划
题目:面额为1,3,5,7四种,给定8块钱,用四种面额的钱组合成8块,并且组合钱的数量要最少。方法一:暴力破解int m[] = {0,1,3,5,7};int dp(int n){ if (n == 1 || n == 3 || n == 5 || n == 7) return 1; int ans = INT_MAX; for (int i = 1; i <= ...原创 2020-02-19 11:56:59 · 338 阅读 · 0 评论 -
01背包问题
https://blog.csdn.net/qq_37767455/article/details/99086678转载 2020-02-18 21:22:31 · 52 阅读 · 0 评论 -
5.最长回文子串
思路:动态规划,时间复杂度O(n^2)对于所给的字符串s,假设dp[i][j]=true表示字符串s[i...j]是回文子串,那么dp[i+1...j-1]必定也为true。则求解最长回文子串就可以分解成一系列子问题,并通过动态规划来求解了。状态转移方程:上述状态转移方程表示,当s[i]==s[j]时,如果s[i+1...j-1]是回文子串,则s[i...j]也是回...原创 2020-02-16 10:34:43 · 65 阅读 · 0 评论 -
306.累加数
class Solution {public: bool isAdditiveNumber(string num) { string first, second,last; for (int len1 = 1; len1 <= num.size() / 2; len1++) { first = num.substr(0,len1); for (int le...原创 2020-02-14 17:43:04 · 80 阅读 · 0 评论 -
746.使用最小花费爬楼梯
class Solution {public: int minCostClimbingStairs(vector<int>& cost) { int n = cost.size(); vector<int> res(n+1,0); for (int i = 2; i <= n; i++) res[i] = min(res[i...原创 2020-02-12 18:42:22 · 133 阅读 · 0 评论