![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划DP
nefukadia
菜且不学
展开
-
动态规划--类背包问题-乌龟棋
洛谷1541题目的成败在于能否写出转移方程我们用dp[i][j][k][z]表示分别用了i j k z 张 1 2 3 4后得到的最高分使用完i j k z 张1 2 3 4后走到的格子P是确定的,分数也是确定的我们就要找出之前的最高分而我们走到P时出的最后一张牌是不知道的所以就分别枚举4种情况(因为只有4张牌)选择最大的一种即可#include <bits/stdc++.h...原创 2020-04-26 19:42:28 · 152 阅读 · 0 评论 -
动态规划--二进制背包/多重背包
之前有过一篇多重背包判断是否能凑一个整数的问题->传送门如果我们不是判断是否能凑成这个数,而是计算这个数内的背包最大值,就不能用这个写法了(也可能是我太菜了,一直WA)于是就有了二进制背包的方式在多重背包中如果每个背包被选择的次数maxi都比较小我们可以把他拆违maxi个相同的背包但如果maxi可能比较大,那么最后的背包总数就可能会超时怎么把这个maxi用一些更小的数字来组合而成...原创 2020-04-23 19:05:48 · 266 阅读 · 0 评论 -
C++ :DP多重部分和问题
多重部分和问题.给你n个数字,每个数字为ai,再给你n个数mi,第i个m表示ai能使用mi次。最后给一个数k,判断能否相加得到k。imput:33 5 83 2 217outputyeshit:3+3+3+8=17如果此类题目的n和m都比较小,可以直接一个三次循环#include <bits/stdc++.h>using namespace std;int ...原创 2020-04-05 15:54:14 · 240 阅读 · 0 评论 -
DP划分数类型问题
划分数今天真是DP的一天.题目:有N个无区别的东西,要分为不超过M份,共有几种分法这道题用常规的打表(前面几个的和)没法做出来。我们来试试用DP首先我们定dp[i][j]是表示n=i,m=j的答案。简单分析一下题目我们可以知道:dp[i][j]=dp[i][j-1]+X,其中X为将i恰好分为j份的分法。何如来得到X呢?n个物品恰好分为m分,我们可以看做先拿出m个物品,每个物品为一份...原创 2020-03-21 23:20:44 · 206 阅读 · 0 评论 -
C++强化版01背包
01背包强化版01背包是DP的经典题型->01背包DP的常规方法时间复杂度为O(n*m)强化版的01背包题目和普通01背包一样,但在数据范围进行了改动原数据1<=n<=1001<=wi,vi<=1001<=m<=10000加强数据1<=n<=1001<=wi<=1e71<=vi<=1001<...原创 2020-05-10 23:36:09 · 245 阅读 · 0 评论 -
C++入门DP--动态规划
动态规划-DP本篇为入门级,dalao绕道(捂脸)DP最经典题目-01背包问题思路简单清晰,将物品和价值都遍历,进行选择 for(int i=1;i<=n;i++)//从第一个物品到最后一个物品遍历 { for(int j=1;j<=m;j++)//将重量遍历 { if(w[i]>j) ...原创 2020-03-21 16:00:44 · 2210 阅读 · 0 评论