dp
sun.strick
这个作者很懒,什么都没留下…
展开
-
bzoj2442
f[i]=max(f[j]+sum[i]−sum[j+1])j∈[i−k−1,i−1] (意思是不取第j+1个元素,从j+2(除j=i-1的情况)到i全取的最优答案) 显然在普通情况下它的复杂度为O(n2)但是如果这是普通情况我会写这篇blog吗?! 我们可以发现j的区间大小固定且像一个”窗口”一样慢慢从左往右移动,sum[i]是固定的,那么只要求f[j]-sum[j+1]的最大值不就转载 2016-07-15 16:29:10 · 304 阅读 · 0 评论 -
蜜汁dp
由于初中玩泥巴。到现在好像都不是很懂泛化背包那一套理论,但是某位大爷教了我一个很迷的dfs序dp....代码还是非常简单的。但是这里的f[i][j]表示的却是正在考虑i节点,已经用掉了j个节点。。。(这句话我也思考了很久,结论是这个正在考虑确实很玄妙,,,首先i号节点肯定是没选,但是他又肯定是要值得去被考虑的。这句话还是看了代码自己领悟吧。。鬼畜的dp状态可以简化一下本来分类讨论到欲仙欲死的题原创 2016-11-01 12:50:34 · 246 阅读 · 0 评论 -
自己编码。。。不会
以前没有做过自己编码的数位dp..涨了点姿势。。发出来慢慢膜在又一次消灭林登·万的战斗中,指挥官moreD缴获了一个神奇的盒子。盒子异常的坚固,以至于完全无法摧毁,唯一打开的方式是通过盒上的密码锁。 经过仔细的调查,研究人员一致认为这个盒子中隐藏了林登·万和他的弟弟林登·图的秘密。然而moreD使用了许多办法,都没能打开这个盒子。最后只好将这个盒子封存在了仓库的底层。事情并没有转载 2016-10-31 18:35:02 · 265 阅读 · 0 评论 -
bzoj3622
显然蒟蒻是抄袭别人的。。。 #include #include #include #include #define M 2020 #define MOD 1000000009 using namespace std; int n,k,s; int a[M],b[M],next[M];转载 2016-10-31 18:01:45 · 221 阅读 · 0 评论 -
lis
首先显然x#include #include #include #include #include #include #include #include #include #include #include#define pb push_back #define forup(i,a,b) for(int i=(a);i<=(b);i原创 2016-11-07 16:18:01 · 228 阅读 · 0 评论 -
四边形不等式之石子归并
虽然四边形不等式不是这类问题的最优解法。但是感觉以后也用不到那种用途非常窄的算法。所以学一下四边形不等式算了。四边形不等式。形象来说就是解决一种区间dp的问题。然后满足几个性质dp(i,j) = min(dp(i,k)+dp(k+1,j)) + w(i,j);(i dp(i,j) = MAX;(i>j)dp(i,j) = 0;(i=j)上式在动态规划的状态转转载 2016-08-11 20:59:43 · 337 阅读 · 0 评论 -
b179 cans
题目还是比较有意思也蛮好懂。。。,首先用病毒健串 ,首先dp[i][j][k] 表示 第i天 长度为j,在ac 自动机上走到了k节点的状态多少。当然可以滚动一下,然后考虑两个回答。一个扔进垃圾桶的很简单。只要dp[day][1][k]都加入ans1即可。 关键点是。 如果现在这个串长度大于在ac自动机上走到的点。那么显然删除首字母还在这个位置、反之就去找他的fail指针。然后如果走到了单词结尾原创 2016-08-22 19:27:47 · 260 阅读 · 0 评论 -
第一次看AC自动机上的dp
给n个字母,构成长度为m的串,总共有n^m种。给p个字符串,问n^m种字符串中不包含(不是子串)这p个字符串的个数。将p个不能包含的字符串建立AC自动机,每个结点用val值来标记以当前节点为后缀的字符串是否包含非法字符串(p个字符串中的任何一个)。状态转移方程:f(i, j) += f(i-1, k) f(i, j)表示长度为i的字符串,结尾为字符j,方程j和k的关系可转载 2016-08-21 12:06:35 · 815 阅读 · 0 评论 -
带有延迟的斜率优化pku3709
#include #include #include using namespace std; const int N = 500010;typedef long long llg; int n, k, queue[N];llg sum[N], f[N], a[N]; llg dy(int j1, int j2){ return (f[j1]-sum[j1]+a[转载 2016-06-21 19:30:08 · 264 阅读 · 0 评论 -
没看出来
蛤先生是一位著名的科学家 ,不久前他得到了一种名叫“熵破坏者” ,不久前他得到了一种名叫“熵破坏者” ,不久前他得到了一种名叫“熵破坏者” 的药剂。 这种药被保存在原创 2016-07-17 19:20:38 · 311 阅读 · 0 评论 -
斜率优化反向dp
时间: 1000ms / 空间: 131072KiB / Java类名: Main描述共有N(1 输入格式输入第一行包含一个整数N(1 输出格式输出仅一行,包含一个整数,表示最小总费用。备注输入样例511 33 24 32 31 4 输出样例153一开转载 2016-06-20 20:12:44 · 257 阅读 · 0 评论 -
单调队列优化dp
来看个小例子: 对于一个长度为n的整数序列(a1,a2,......,an),从中找出一段连续的长度不超过m的子序列,使得这个序列的和最大。首先前缀和sum[i]=a[1]+a[2]....+a[i]; 容易想到 f[i]=max{sum[i]-sum[k]} (i-m 时间复杂度为O(m*n)优化 :先分离f[i]-sum[i]=max(-su原创 2016-06-19 21:19:13 · 257 阅读 · 0 评论 -
斜率优化
bzoj1911 && APIO2010 特别行动队题目描述你有一支由n名预备役士兵组成的部队,士兵从1到n编号,要将他们拆分成若干特别行动队调入战场。出于默契的考虑,同一支特别行动队中队员的编号应该连续,即为形如(i, i + 1, …, i + k)的序列。编号为i的士兵的初始战斗力为xi ,一支特别行动队的初始战斗力x为队内士兵初始战斗转载 2016-06-19 21:03:01 · 388 阅读 · 0 评论 -
dp斜率优—2
hdu4258题目大意:将n个升序数字序列,分成几组连续的序列 ,每一组的所得值,等于最右边的num2减去最左边 的num1,的平方+c即(numi-numj)^2+c解题报告 人:GHQ(SpringWater)分析可得:(dp[j2]-dp[j1]+num[j2+1]*num[j2+1]-num[j1+1]*num[j1+1])/(2(num[j2+1]-n转载 2016-06-19 20:56:37 · 185 阅读 · 0 评论 -
破dp.
小松鼠开心地在树之间跳跃着,突然她停了下来。因为眼前出现了一个拿着专克超萌小松鼠的法宝————超萌游戏机的游客! 超萌游戏机之所以拥有这个名字,是因为它的屏幕是一个n 2的矩形。小松鼠接过游戏机,开始了她的第一个游戏:俄罗斯方块。 考虑到小松鼠的智商,游戏机里的方块只有下面四种,方块按顺序下落,可以在任意时刻(甚至是下落前)对其进行不限次数的旋转操作。 由于四种原创 2016-11-14 14:28:28 · 417 阅读 · 0 评论