动态规划
黑猫black
这个作者很懒,什么都没留下…
展开
-
10.11学习总结
现在补10.11的坑,假装现在是10.11。原创 2016-10-12 21:45:50 · 256 阅读 · 0 评论 -
【hdu3689】 Infinite monkey theorem
题意 字符集中有一些字符(最多26个),给出每个字符的出现概率(它们的和保证为1) 再给出一个子串B,长为M 求:任给一个长度为N的字符串A(只能包含字符集中的字符),使得B是A的子串的概率。 N<=100解法 DP 想象一边随机生成字符串A,一边用KMP匹配字符串B的过程 f[i][j]表示随机生成到第i位,此时B串匹配到第j位的概率 枚举下一位生成字符c,设其生成概率为gc 假原创 2017-02-04 22:17:45 · 333 阅读 · 0 评论 -
10.10学习总结
嗯,依然是补上前两天的坑,假装现在是10.10. 今天复习了lch的讲课内容,关于动规的拓展与延伸, 今天对背包问题进行了一个大的总结 总的来说背包问题分为6类 1.01背包 非常经典的背包问题,直接见代码for(int i=1;i<=n;i++) { tot+=c[i]; bound=max(c[i],v-tot); f原创 2016-10-12 08:35:09 · 294 阅读 · 0 评论 -
【洛谷】P1417亨调方案
01背包的变形原创 2016-12-15 14:26:35 · 459 阅读 · 0 评论 -
【洛谷P1006】传纸条
一道简单的DP原创 2016-12-15 07:23:10 · 583 阅读 · 0 评论 -
洛谷【P1156】垃圾陷阱
也是一眼能看出来的01背包,但是状态不太好选择,可以选择时间也可以选择高度,其实都差不多,时空要求比较低,我选择高度作为的状态,选择了状态和决策之后,状态转移方程就显而易见了,比较难处理的是对于不能达到时的情况,第一遍提交的时候有一个点没过,就是因为第二种情况没写好,不过其实画个图还蛮好写的。#include<iostream>#include<cstdio>#include<algorithm原创 2016-12-16 16:00:30 · 418 阅读 · 0 评论 -
【洛谷P1052】过河
很经典的一道题,也是很著名的一道状态压缩DP,十一的时候lch讲过但是没听懂= =,当时太弱(其实现在也很弱),然后也是因为这道题来学习了一下状态压缩dp,其实也没学多少,因为状态压缩说实话范围挺广的,可以hash可以离散化,可以bulabula.. 然后这道题的思路理解之后其实也是蛮简单的,就是因为L太大,1e9时空都会超,又因为n<100,是一个稀疏图,所以呢,可以对他进行路径压缩,我们可以认原创 2016-12-16 13:58:57 · 1190 阅读 · 0 评论 -
洛谷【P1063】能量项链
其实跟矩阵连乘一样,也可以类比着环形的石子归并来做,状态dp[i][j]表示从i开始j个的合并的最优解,状态转移方程很好列出。 dp[i][j]=max(dp[i][j],dp[i][k]+dp[(i+k)%n][j-k]+calc(i,k,j))(j>k>0)#include<iostream>#include<cstdio>#include<cstring>#include<string原创 2016-12-16 07:23:06 · 418 阅读 · 0 评论 -
【洛谷P1282】多米诺骨牌
啊啊啊啊,这道题搞了一晚上,简直要疯了,其实就是一道很简单的背包DP,一眼就看出来了,但是各种修改每次都是55分,最后发现好像除了第一次以后都不能从j=0开始转移,就是说每次都必须选一项,其实也不是很懂发题解的人为什么空间优化之后只要把j=0给覆盖掉就好了,而不考虑以后的错误转移,应该是可以用数学证明的= =但是蒟蒻就是不会啊,所以以后这样的题还是仔细的考虑一下能不能空间优化吧,如果自己不去管那绝对原创 2016-12-14 20:59:23 · 655 阅读 · 0 评论 -
DP专题--数的划分
DP还是太弱原创 2016-12-09 19:49:48 · 1791 阅读 · 0 评论 -
【洛谷P1020】导弹拦截
其实这道题真的已经跟模板题差不多了,初学DP的时候接触了很多遍这道题了,但是今天着重研究了一下关于第二问的数学证明,离散数学中的偏序集的Dilworth定理,最长链划分=最长反链的长度,于是第一问求最长不上升子序列,第二问就变为了求最长下降子序列,两遍DP就出来了,我是直接没保存各个导弹的高度,直接同时DP就当是练练LIS算法了。#include<cstdio>#include<iostream>原创 2016-12-14 20:48:27 · 989 阅读 · 0 评论 -
【洛谷P1280】尼克的任务
一道比较另类的DP,一开始没想出来,觉得应该不用DP搞就能出来,然后看了题解发现原来这么简单。dp【i】表示从i开始的最大空闲时间,逆序推dp,分情况:1:如果改时间没有工作需要开始,那么当然是要休息的,表示现在休息一分钟,dp【i】=dp【i+1】+12:如果有需要开始的,那么在所有需要开始的工作中选一个最优的(废话),dp【他们的末尾时间+1】最大的,来表示他们工作完之后最多能休息多长时间(注意原创 2016-12-14 20:52:42 · 624 阅读 · 0 评论 -
[codeforces]1223F Stack Exterminable Arrays
很巧妙的一道题首先我们考虑计算nxt数组,表示从第iii个位置起第一个下标rrr使得al..ra_{l..r}al..r为可灭绝的,只要求出nxt[i]我们就可以使用DP在O(N)O(N)O(N)时间内求出答案。考虑计算nxt[i]数组的方法,如果直接计算总复杂度是O(N2)O(N^2)O(N2)的,我们要寻找在O(N)O(N)O(N)时间内求出这个数组的方法。添加一个map nxtX[i...原创 2019-10-11 17:17:26 · 425 阅读 · 1 评论