DP
gerayking
默默努力,享受过程,不问前程
展开
-
牛牛的回文串
题目链接 牛牛的回文串 #include<bits/stdc++.h> using namespace std; #define ll long long /* 解决一个回文串可以发现,添加一个字符和删除一个字符是等价的,删除一个字符相当于在另一侧添加一个字符,所以只需要计算删除一个字符 所需要的的代价即可,删除一个字符可以用过 1. 先将该字符change成另一个字符再删除 2. 添加任意一个字符再修改成该字符相当于添加 3. 将该字符替换成另一个字符c在通过添加另一个字符 4.原创 2020-12-25 15:47:26 · 219 阅读 · 0 评论 -
每日一题-NC17137-DP
题目链接 NC17137 思路 DP状态定义为dp[i][j]表示前i个数删除j个后的答案。那么很容易得到递推方程 dp[i][j]=dp[i-1][j-1]+dp[i-1][j]; 就是删除当前这个和不删除当前这个的情况,然后如果是 1 2 3 5 6 7 8 5 m=4的话,就会出现删除5 6 7 8 和删除6 7 8 5的情况重复的情况,我们需要减去重复的这部分,观察到重复的这部分需要把6...原创 2020-04-27 22:01:26 · 166 阅读 · 0 评论 -
Gym-102392B
题目链接 Gym-102392B 思路 对于每个任务要么选择level 1要么level 2或者不选,不选的话就会由上上个状态转移到,我们定义DP状态为dp[i][j]表示前n个物品中第一阶段经验为i,第二阶段经验为j的最小分钟数,需要给任务排序,因为会有溢出,防止出现{90,30,30,30}而应该选取{30,30,30,90}的情况。而第一阶段存在溢出的情况,所以只有在i < s1的时候...原创 2020-04-26 09:08:00 · 359 阅读 · 0 评论 -
Poj 3046
题目连接 POJ 思路 dp[i][j]表示前i个不同的数,所组成的长度为j的方案数目显然可以得到一个状态转移 dp[i][j]=∑k=0min(j,num[i])dp[i−1][j−k] dp[i][j]=\sum_{k=0}^{min(j,num[i])}dp[i-1][j-k] dp[i][j]=k=0∑min(j,num[i])dp[i−1][j−k] 但是这样算的话复杂度是O(nm^2...原创 2020-04-05 14:08:43 · 164 阅读 · 0 评论 -
HDU 6578
题目链接 HDU6578 思路 观察到n很小,然后只有4个数字所以我们考虑用DP,来写,状态为dp[i][j][k][l]即把{0,1,2,3}最后出现的位置排序后就是i,j,k,l,例如[0,0,1,1,2,3,1]对应的状态就是dp[2][5][6][1],然后考虑t+1个数出现的转移方程我们可以得到 dp[i][k][m-1][m]+=dp[i][j][k][m-1] dp[i][j][m...原创 2020-04-04 17:28:04 · 309 阅读 · 0 评论 -
背包九讲--开始!!
1.最简单的一个,01背包与完全背包,我只讲一维的,二维的很好理解。 https://www.luogu.org/problemnew/show/P1060 #include<bits/stdc++.h> using namespace std; const int maxn=3e4+10; int w[30],v[30]; int dp[maxn]; int main() { ...原创 2019-06-13 08:14:08 · 85 阅读 · 0 评论