随笔分类 - DP
摘要:LCS问题 LCS:最长公共子序列,表示序列 L 和 J 最长公共的子序列长度。 计算 LCS 的经典方法是时间复杂度为 O(n*m) 的 dp。不妨设 dp[i][j] = LCS(L[0~i], J[0~j]),这样能够得到递推公式: dp[i][j] = 0 (i=0 or j = 0) dp
阅读全文
摘要:sg大法好 无脑sg即可,不用去找规律了。
阅读全文
摘要:这题现场的数据出水了,暴力就能搞过。 标解是拿bitset做,转移的时候用bitset优化过的操作(与或非移位)来搞,复杂度O(N*M/w) w是字长 第一份标程的思路很清晰,然而后来会T。
阅读全文
摘要:首先想到的就是sort一下,然后每个集合都在排过序的数组里面取,不重复。 这样就推出公式dp[i][j] = min(dp[k][j-1] + (s[i]-s[k+1])^2) 其中dp[i][j]为在第i位完成j个分组的。 不考虑分组的情况下跟打印文章那题一样。考虑上需要有M个分组,就是两层for
阅读全文
摘要:为了学CDQ分治,从斜率dp和凸包开始做吧。。 代码就是维护一个凸包。利用递增的性质丢掉不合适的点。 http://www.cnblogs.com/Rlemon/p/3184899.html 代码学的上面 很模板
阅读全文
摘要:略复杂的dp题。 有n个人,每个人有两个分数di,pi。从中选出m个人,要求|sigma(di)-sigma(pi)|最小,相同时则输出sigma(di)+sigma(pi)最大的情况。 答案完整输出方案。 dp[i][j]表示i个人的组合里,差值为j的情况下,和值的最大值。 计算每一个人的差值su
阅读全文
摘要:不是特别难的一道dp题。 给r个红块,g个绿块,计算这些块能磊出的最高塔的方案数。 塔的每一层都比上一层多一块,每一层只能有一种颜色。 dp[i][j]表示第i层,j个红块的方案数。 则dp[i][j] = dp[i-1][j] + dp[i-1][j-i].注意一下方案的转移和最终结果的统计。
阅读全文
摘要:一道dp模拟题。 给n个板子和一个初始坐标xy,从x,y开始向下跳,有一个最高的下跳距离。 在板子上走和下跳都消耗时间。计算到达地面的最短时间。 把板子按高度排序 dp[i][0]表示到达第i块板子左边沿的时间,dp[i][1]表示到达右边沿的时间。 则 dp[i][0] = min(dp[k][0
阅读全文
摘要:模拟黄金矿工这个游戏,给出每一个金子的位置和所需时间,计算在给定时间内最大收益。 刚看这道题以为金子的位置没什么用,直接DP就行,WA了一发终于明白如果金子和人共线的话只能按顺序抓。 这就是需要考虑先后关系问题。看了背包⑨讲之后以为是“有依赖关系的背包”,感觉解决方案很不明显,想不出来做法。 后来想
阅读全文
摘要:一共左右两排共2N盏灯,计算每排都亮M盏以上的期望。每天每盏灯有P的概率点亮。 dp[i][j]记录左边i盏右边j盏时的期望,从dp[N][N]往前推。//没学概率论写的好懵逼。 1 #include <cstdio> 2 #include <cstring> 3 #include <iostrea
阅读全文
摘要:用dp求出最大的表达,再用dp求出。//然而并没有想出来 1 #include <cstdio> 2 #include <string> 3 #include <algorithm> 4 #include <iostream> 5 6 using namespace std; 7 8 const i
阅读全文
摘要:http://poj.org/problem?id=3254从这里学的 http://blog.csdn.net/accry/article/details/6607703状压dp的入门题。一片N×M的田地,有的地方可以种玉米,有的地方不可以。种玉米的区块不能相邻。种玉米的求总方案数,不种玉米也是一...
阅读全文
摘要:http://poj.org/problem?id=2096有n种分类,s种子系统,相互独立。每天发现一个bug等概率的属于n种分类和s种子系统。要使发现的bug完全覆盖n种分类,s种分类,求天数的期望值。用dp[n][s]表示已发现n种分类s种子系统需要的天数期望,则dp[n][s]可以转化成dp...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3853膜猴烧酒madoka讲定义为dp[i][j] 位置为ij的魔法值期望,可以发现dp[i][j] = dp[i][j]*p1[i][j]+dp[i][j+1]*p2[i][j]+dp[i+1][j]*p3[i]...
阅读全文
摘要:http://codeforces.com/problemset/problem/414/B定义一个串为好的串当这个串符合 di|di+1,1#include #include using namespace std;const int MOD = 1000000007;int n,k,dp[201...
阅读全文
摘要:http://poj.org/problem?id=1276简单的多重背包,不过需要优化一下才能过。网上还有暴力的做法。二进制优化在背包九讲里讲的比较清楚。对于多重背包的每一件物品,使用二进制的形式表示。比如5件A价值物品,可以表示成1件1*A价值物品+1件2*A价值物品+1件2*A价值物品。这三种...
阅读全文
摘要:很基础的dp题。有一头奶牛想接尽量多的苹果,有w此移动机会。dp[i][w] = max(dp[i-1][w+1] + 能否吃到苹果 ,dp[i-1][w] + 能否吃到苹果) //从上一分钟是否移动中选出最大值转移我开始状态转移方程没写错,但是边界条件总是写不好,不能处理0。并不是这样的,刚刚又看...
阅读全文