DP
文章平均质量分 57
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[DP] BZOJ 4584 [Apio2016]赛艇
这名字很赛艇啊其实不是很懂做法http://blog.163.com/ele_ele/blog/static/2571160702016419115317400/#include #include#include using namespace std;typedef long long ll;inline char nc(){ static char bu原创 2016-08-28 18:44:42 · 794 阅读 · 0 评论 -
[DP 斜率优化 CDQ分治||动态维护凸包] BZOJ 1492 [NOI2007]货币兑换Cash
打了个set维护凸包 cdq等待填坑#include#include#include#include#include#include#define dprintf(...) fprintf(stderr,__VA_ARGS__)using namespace std;//typedef long double ld;typedef double ld;inline原创 2016-08-08 22:15:24 · 683 阅读 · 0 评论 -
[平方的拆分 DP] BZOJ 1566 [NOI2009]管道取珠
根据乘法原理 方案数的平方等价于 操作两次结果相同的产生一的贡献#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin);原创 2016-08-08 22:17:49 · 292 阅读 · 0 评论 -
[DP 容斥] BZOJ 2669 [cqoi2012]局部极小值
从小到大放 如果一个格子是极小值 一定比周围先放 根据这个dp但是这样不保证其他地方也成为极小值 那么容斥一下 最多8个是极小值#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef pair abcd;typedef原创 2016-08-08 22:20:37 · 440 阅读 · 0 评论 -
[决策单调性 分治||单调栈 DP] BZOJ 2739 最远点
决策单调性 用分治或者单调栈 单调栈没打过 尴尬#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,原创 2016-08-23 18:17:41 · 1033 阅读 · 0 评论 -
[数位DP] BZOJ 3209 花神的数论题
求出有i个1的数有多少然后快速幂#include#include#includeusing namespace std; typedef long long ll; const int N=100005; const int M=255; const int P=10000007; ll a[N],len,n; ll C[M][M];原创 2016-08-23 18:25:07 · 338 阅读 · 0 评论 -
[树形DP || 贪心] BZOJ 1907 树的路径覆盖
DP#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,10原创 2016-08-23 18:26:25 · 433 阅读 · 0 评论 -
[第二类斯特林数 树形DP] HDU 4625 JZPTREE && BZOJ 2159 Crash 的文明世界
%%%jiry_2也可以这样:http://blog.csdn.net/dwylkz/article/details/9749827#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ s原创 2016-08-22 21:25:55 · 1090 阅读 · 0 评论 -
[矩阵快速幂加速DP] Codeforces 717D Bubble Cup 9 - Finals D. Dexterina’s Lab
fx 表示 异或和为x的概率然后DP一下#include#include#includeusing namespace std;const int N=150;struct Matrix{ int n; double a[N][N]; Matrix(int in=0,int f=0){ n=in; for (int i=0;原创 2016-09-14 19:32:09 · 696 阅读 · 1 评论 -
[概率DP] Codeforces 453A Little Pony and Expected Maximum
比较简单的概率题f(k)=(k/n)^m-f(k-1)#include #include#include using namespace std; int n,m; inline double Pow(double a,int b){ double ret=1; for (;b;b>>=1,a*=a) if (b&1) ret*原创 2016-09-15 21:55:55 · 302 阅读 · 0 评论 -
[矩阵快速幂 数学] UR #16 A.破坏发射台
其实那个不考虑对角是可以手推的考虑对角只能dp了详见官方题解以及百度文库:原创 2016-09-16 13:35:53 · 394 阅读 · 0 评论 -
[数位DP] HDU 2089 不要62
简单的数位DP数位DP的简单思想从低位到高位开始枚举每次状态有两种 即 到当前位与上限n一模一样 和 到当前位已经小于n那么就可以枚举当前位进行转移因为 到当前位与上限n一模一样 只有一种状况 所以不特意储存 代码中dp数组都表示 到当前位已经小于ndp[2] 表示 已经出现62dp[1] 表示 上一位是6dp[0] 表示其他记一个flag表示 n前几位是否出现原创 2016-09-20 18:22:11 · 279 阅读 · 0 评论 -
[数位DP] HDU 3555 Bomb
数位DP详见:http://blog.csdn.net/u014609452/article/details/52598675#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(原创 2016-09-20 18:23:15 · 311 阅读 · 0 评论 -
[较复杂的数位DP] HDU 4507 吉哥系列故事——恨7不成妻
较复杂的数位DP我们不止记录个数,还记录和,平方和进行转移 然后就是简单的数位DP了#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(){ static char原创 2016-09-20 18:24:42 · 355 阅读 · 0 评论 -
[DP 贪心] 51Nod 1673 树有几多愁
如果我们确定了每个叶子之间的相对大小关系,就可以用贪心来解决这个问题了。对于每一个祖先,它的编号一定大于它的所有儿子。我们从大到小来枚举所有编号(这里指相对大小)。令dp[i]表示i这个状态的节点可以得到的最大乘积。有dp[i]可以转移到dp[i+j],其中j这个状态仅有一个节点,并且那个节点的权值是可以算出来的。令f[i]表示i这个状态的节点全部向根染色后最终会有多少点被染色原创 2016-09-25 16:45:23 · 557 阅读 · 0 评论 -
[环 链 DP] Hillan模拟赛 B.或异或
因为每个点不超过两次 两两连边 发现是一些环和链相互独立然后就是在环链上DP 注意一些细节#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(){ static char原创 2016-10-23 10:26:32 · 383 阅读 · 0 评论 -
[组合数 DP] HDU 4532 湫秋系列故事——安排座位
一种典型的组合数DP f[i][j]表示前i种数值排列有j个不合法间隙的方案数然后枚举第i个分成几块k 有l块塞入j个不合法空隙中进行转移答案即为f[n][0]不过还要乘以排列数#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;type原创 2016-09-27 18:04:28 · 909 阅读 · 0 评论 -
[容斥系数 记录状态DP] 2016 计蒜之道 初赛 第四场 遗失的支付宝密码
题解:http://blog.jisuanke.com/?p=270其实答案最后答案的结构显然是 c_1 \cdot m^1 + c_2 \cdot m^2 + ... + c_n \cdot m^nc1⋅m1+c2⋅m2+...+cn⋅mn 这样的,系数 c_ici 只和nn 有关,于是可以本地打表出来。这样就可以很快解决这个 case。原创 2016-11-10 07:02:55 · 642 阅读 · 0 评论 -
[树形DP 双指针扫描] 2016 计蒜之道 初赛 第六场 微软的员工福利
n3的做法可以对每个点枚举最小值最大值我们发现极差/1000最多只有101种取值那我们枚举极差 枚举最大值 同时顺便维护在这个取值区间内的最优决策较大提升的显示器不在区间内的话,就一定要把较小显示器选上;如果来自同一子树的两个显示器都在区间内,贪心选 dpdp 值较大的那个可以用尺取法双指针扫过复杂度(101n+nlogn)log的复杂度来自排序#inc原创 2016-11-10 18:09:50 · 748 阅读 · 0 评论 -
[DP 决策单调性 || 贪心] UER #7 A.短路
先是写了个决策单调性DP然后知道能贪心 就没写了#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(bu原创 2016-10-31 17:53:09 · 347 阅读 · 0 评论 -
[DP 匈牙利 最小链覆盖] BZOJ 2044 三维导弹拦截 & 计蒜客 271 拦截导弹
第一问就是偏序最长链 按一维排序然后DP即可第二问是个最小链覆盖 那么转化为二分图 n-最大匹配BZOJ上一个匈牙利就过了#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static ch原创 2016-11-17 07:11:30 · 491 阅读 · 0 评论 -
[DP] BZOJ 1571 [Usaco2009 Open]滑雪课Ski
就是f[i][j]表示到i时刻 j点能力值的最大值然后DP就好了#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,1原创 2016-11-17 07:23:46 · 282 阅读 · 0 评论 -
[数位DP] 好数
对于一个正整数X,如果把X化成二进制数后,如果X的二进制数至少有三个连续的1或者至少有3个连续的0(不能有前导0),那么X就是“好数”。例如8就是“好数”,因为8对应的二进制数是1000,有三个连续的0。整数15也是“好数”,因为15对应的二进制数是1111,也有三个连续的1。整数27就不是“好数”,因为27对应的二进制数是11011,既没有连续的三个1也没有连续三个0。现在给出两个整数L原创 2016-11-17 07:26:27 · 608 阅读 · 0 评论 -
[反序表 DP] 51Nod 1020 逆序排列
反序表那一套理论来自:http://blog.csdn.net/synapse7/article/details/170932451. 先介绍反序表的概念:令bi(1比如说,排列5 9 1 8 2 6 4 7 3有反序表2 3 6 4 0 2 2 1 0(在1左边且大于1的有2个,在2左边且大于2的有3个,……)2. 关键结论:由1知,第1个元素的反原创 2016-11-17 07:30:47 · 784 阅读 · 0 评论 -
[DP Hash] 51Nod 1055 最长等差数列
讨论帖:http://www.51nod.com/question/index.html#!questionId=79DP[i,j]表示以第i个数为倒数第2项,第j个数为最后1项,可以组成的等差数列的长度然后hash记一下一个数上次出现的时间这是一篇专门解决这个问题的论文http://www.cs.uiuc.edu/~jeffe/pubs/pdf/arith原创 2016-11-17 07:41:23 · 791 阅读 · 0 评论 -
[多线程DP 费用流] 51Nod 1084 矩阵取数问题 V2 & POJ 3422 Kaka's Matrix Travels
k取方格数问题 经典可以DP k大了就只能费用流 一个点拆成两个来卡流量多年前的代码丑#include#include#include#include#define oo 2147483647#define cl(x) memset(x,0,sizeof(x))using namespace std;const int N=205;struct edge{原创 2016-11-17 07:44:35 · 416 阅读 · 0 评论 -
[DP 背包] BZOJ 1190 [HNOI2007]梦幻岛宝珠
记fij为考虑到 2^i 时 剩余为 j*2^i然后层内转移 这层剩下的翻倍给下一层用详见一道加强版:http://blog.csdn.net/u014609452/article/details/53157847#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using原创 2016-11-14 18:33:59 · 880 阅读 · 0 评论 -
[DP 暴力 || ST表 || 单调队列] BZOJ 1499 [NOI2005]瑰丽华尔兹
DP方程不难想 主要是优化首先可以暴力AC 成就感满满论文:周以苏--反汇编在常数优化因子中的应用#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fre原创 2016-12-04 12:01:22 · 362 阅读 · 0 评论 -
[DP 数论] 51Nod 1201 整数划分
dp[i][j] 代表用j个数字的和为i的数的个数dp[i][j] = dp[i - j][j - 1] + dp[i - j][j](不过好像不太对)把所有的数都加上1,然后再额外的给出一个1 或 将现有的每一位加1#include#include#include#includeusing namespace std;const int N=50005;原创 2016-11-22 14:22:49 · 340 阅读 · 0 评论 -
[贪心 DP] 51Nod 1241 特殊的排序
求出最大的连续子序列即可 然后不对的向两边怼#include#include#includeusing namespace std;const int N=50005;int n,a[N],pre[N],ans;int f[N];int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",a+i原创 2016-11-22 14:29:25 · 365 阅读 · 0 评论 -
[DP] 51Nod 1293 球与切换器
经过该切换器的球的总量是k,发现如果是该位置的值是1,那么会有(k+1)/2的球像右去,剩下的球向下去。如果该位置的值是-1,那么会有(k+1)/2的球像下去,剩下的球向右去。#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf原创 2016-11-22 14:31:49 · 338 阅读 · 0 评论 -
[五边形数定理 DP] 51Nod 1259 整数划分 V2 & HDU 4651 Partition
详见:http://blog.csdn.net/acdreamers/article/details/12259815#include#include#includeusing namespace std; typedef long long ll; const int N=50005; const int P=1e9+7;ll F[N],f[N];原创 2016-11-22 15:41:10 · 531 阅读 · 0 评论 -
[数位DP 高精度 拓扑排序 bitset] BZOJ 2913 [Poi1997]XOR Gates
先拓扑 再xor出输出的表达式然后就是数位DP了到底用不用高精度?#include#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+f原创 2016-12-13 21:14:37 · 406 阅读 · 0 评论 -
[树形DP] POJ 2152 Fire
论文:陈启峰--一张一弛,解题之道详见论文 篇幅过长 不摘录了放宽 “每个城市在不超过距离的前提下,可以选择任意一个消防站作为负责站”制约“假设城市p1选取城市pm的上消防站作为负责站,令p1到pm的路径为p1p2p3……pm,那么对于任意pi都有的负责站为pm。”#include#include#include#include#define原创 2016-12-09 20:37:49 · 338 阅读 · 0 评论 -
[模型转化 最长下降子序列] BZOJ 2924 [Poi1998]Flat broken lines
将坐标系向左旋转45度,那么折线就要求x,y均不降,以x为第一关键字,y为第二关键字排序,那么一条折线就对应一个不降子序列。根据最小链覆盖=最长反链,故求出最长下降子序列的长度即可#include#include#includeusing namespace std;const int N=30005;struct abcd{ int x,y; void re原创 2016-12-17 11:25:22 · 411 阅读 · 0 评论 -
[数形结合 数位DP] BZOJ 2917 [Poi1998]Painter’s Studio
以左下角为(0,0)建立坐标系,考虑一个点a,b存在一个洞(称为yes(a,b))的条件为存在i使得a的第i个二进制位为0,b的第i个二进制位为1,故问题转化为求所有a,b使 a,b,a+x,b+y∈[0,2^n-1] and yes(a,b) and yes(a+x,b+y) 使用递推解决: f[I,0..1,0..1]表示第i位至第n位,a是否得到了了前n-1位的进位,原创 2016-12-17 11:34:37 · 520 阅读 · 0 评论 -
[树形DP 费用流手动增广] Codeforces Gym 101190 NEERC 16 M. Mole Tunnels
因为这个图增广来增广去不会有负环 那么一条增广链必然是树上一条简单路径 那么考虑用树形DP找最短路增广dls是这么说的考虑费用流,每一次要找一条最短的增广路。枚举LCA,然后维护一下每个子树往下走的最短路即可。增广的时候加一下反向边。可以直接树形dp,不需要数据结构维护。#include#include#includeusing namespa原创 2017-01-03 17:31:25 · 825 阅读 · 0 评论 -
[区间DP 中位数] BZOJ 2933 [Poi1999]地图 Map
区间DP没什么好想的 mn2也懒得优化了中位数 这个递推好啊P[i,j]有定义式为P[i,j]=Sum{ Abs( S[k]-Mid(i,j) ) | i但是如果我们直接这样求,时间复杂度高达O(N^3 + N^2*M),关键在于求P[i,j]时浪费了太多时间。其实我们可以递推求出P[i,j]。递推式P[i,j]=P[i+1,j] + Mid(i,j) - S原创 2016-12-17 11:16:32 · 450 阅读 · 1 评论 -
[DP 状态稀疏性优化] BZOJ 2925 [Poi1999]单一阿拉伯数字表示法 Monodigital Representations
状态稀疏性优化?我也不知道是什么东西 反正就是乱搞f[i]表示得到i的最少的数字k {i f[k]=1 f[kk]=2 f[kkk]=3 …… f[i] = min(f[j]+f[i-j],f[j]+f[i+j],f[j]+f[i*j],f[j]+f[i/j])优化:答案不超过8,易知可行状态不会很多(4000左右),使用类广搜实现即可。时间复杂度4000^2原创 2016-12-14 06:49:10 · 403 阅读 · 0 评论 -
[DP 压位] BZOJ 2915 [Poi1997] gen Genotypes
Tn3复杂度能过?搬题解逆向思维. 设d[i,j,c]为真当且仅当[i,j)的子串可以合成字母c. 递推时可枚举分裂位置k: 对于某个规则A1A2A3, 如果d[i,k,A2]与d[k,j,A3]均为真, 则d[i,j,A1]为真. 即:d[i,j,A1] = d[i,j,A1]OR (A[i,k,A2] AND A[k,j,A3])状态有cn2个, 转移有原创 2016-12-13 21:12:37 · 431 阅读 · 0 评论