
dp
喜欢刷dp的菜菜
这个作者很懒,什么都没留下…
展开
-
多重部分和问题
分组背包问题注意边界和起始值为1就可#include <iostream>#include <algorithm>#include <cstring>#include <vector>#include <set>#include<cmath>using namespace std;const int N = 550;typedef long long ll;bool st[N];int dp[N][N原创 2022-03-08 17:49:48 · 139 阅读 · 0 评论 -
dp推理(短小版)
dp从小到大看能把状态表示出来的最小维度一维——线性dp,dp一个空间就代表一个集合的属性值题目问什么,集合就是什么例如:以i结尾的上升子序列集合属性就是:Max,sum,情况数把集合分成小类,1.结尾i是确定的2.以i-1是哪个数来分类(倒数第二个数是序列第0个数,第一个数,第二个数,第三个数.....)3.如果某个类存在嘤嘤嘤,csdn嫌我过于短小哭唧唧...原创 2022-03-07 20:11:46 · 103 阅读 · 0 评论 -
最长上升子序列(线性dp)
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<vector>#include<algorithm>#include<set>using namespace std;int ans;const int inf = 0x3f3f3f3f;const int .原创 2022-03-07 19:58:46 · 101 阅读 · 0 评论 -
多重集组合数dp
思路:先用闫式dp分析法,确定属性和集合dp[i][j]集合就是表示看前i种物品取j个物品的集合属性为%M的方案数集合划分 就是从(i-1,j-0)~~(i-1,j-a[i]/i-1,j-j)然后这是我们就发现这样加起来就是三层循环,第三层就是一部分上一层结果的和,按照移动窗口的思维,我们可以将前一步计算好的结果复用,从而降维。有三个坑点1.注意j-1-a[i]一定要大于零,特殊判断一下2.%M要求算出的结果每次+M%M3.dp第一个加的是(i,j-1),不要粗心写成原创 2022-03-07 19:45:51 · 187 阅读 · 0 评论