![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划优化
Neo__Z
这个作者很懒,什么都没留下…
展开
-
poj3744 Scout YYF I 【概率dp+矩阵优化】
解题思路:很容易想到设dp[i]表示安全走到i的概率,则dp[i]=p∗*dp[i-1]+(1-p)∗*dp[i-2],然后有地雷的地方概率为0,最后dp[maxpos+1]就是答案; 但数据范围是[1, 100000000],显然过不了。注意到地雷只有10个,所以可以把地图分为10段,每两个地雷之间的dp用矩阵优化就可以过了。#include<iostream>#include<cstdio>原创 2017-10-28 08:34:08 · 364 阅读 · 0 评论 -
BJ模拟 排列【状压dp+矩阵快速幂】
题目大意:求长度为nnn,且满足对于任意i,|pi−i|≤ki,|pi−i|≤ki,|p_i-i|\le k的排列数。n≤1e9,k≤5n≤1e9,k≤5n\le 1e9,k\le 5解题思路:由于kkk很小,很容易想到记录一个2k+12k+12k+1位的状态表示当前位还有那些位置可以用,再用矩阵快速幂优化,但还是会TLE。注意到我们每一步转移恰好增加一个占用,至多减少一个占用,所...原创 2018-05-02 09:03:12 · 214 阅读 · 0 评论 -
bzoj5252 [九省联考 2018] 林克卡特树【动态规划+二分凸包】
解题思路:首先分析题意:就是求k+1k+1k+1条不相交的链,使其权值和最大。第一个反应肯定是用费用流做,那么费用流有什么性质呢? 考虑增广过程,相当于每次都新找一条链出来(也会影响原来的链),不妨设找iii条链的最优答案为AnsiAnsiAns_i,那么有Ansi−Ansi−1≥Ansi+1−AnsiAnsi−Ansi−1≥Ansi+1−AnsiAns_i-Ans_{i-1}\ge A...原创 2018-05-02 14:22:44 · 454 阅读 · 0 评论 -
bzoj5298: [Cqoi2018]交错序列【二项式定理+动态规划+矩阵快速幂】
传送门解题思路:xayb=(n−y)ayb=∑i=0a(ai)ni(−1)a−iya+b−ixayb=(n−y)ayb=∑i=0a(ai)ni(−1)a−iya+b−ix^ay^b=(n-y)^ay^b=\sum\limits_{i=0}^a\binom{a}{i}n^i(-1)^{a-i}y^{a+b-i}设f[k][i][0/1]f[k][i][0/1]f[k][i][0/1]表示...原创 2018-05-03 14:12:40 · 306 阅读 · 0 评论 -
BJ模拟 巡游计划【线段树】
题目描述:在遥远的精灵世界,有一个神奇的国度。这个国度由N座城市(从1到N编号)构成,其中1号城市是精灵们的首都,N号城市是精灵们的边疆。精灵国王每年都要从首都出发到边疆去巡游,沿途抚恤她的子民们:她每到一个城市i,就会花A[i]天的时间来巡游这个城市。精灵世界分布在不同的次元中,所以精灵们只能通过传送阵出行。他们每个城市有一个空间坐标,第i座城市的坐标为P[i],保证P[i]是[1,M]...原创 2018-04-25 21:25:21 · 169 阅读 · 0 评论 -
bzoj5294: [Bjoi2018]二进制【动态规划+线段树】
Descriptionpupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是333 的倍数。他想研究对于二进 制,是否也有类似的性质。于是他生成了一个长为n 的二进制串,希望你对于这个二进制串的一个子区间,能求出 其有多少位置不同的连续子串,满足在重新排列后(可包含前导0 )是一个3 的倍数。两个位置不同的子区间指开 始位置不同或结束位置不同。由于他想尝试尽量多的...原创 2018-05-10 15:13:57 · 785 阅读 · 0 评论 -
bzoj4361: isn【树状数组优化dp+容斥】
Description给出一个长度为n的序列A(A1,A2…AN)。如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。Input第一行一个整数n。 接下来一行n个整数,描述A。Output一行一个整数,描述答案。Sample Input41 7 5 3Sample Outpu...原创 2018-05-17 15:41:33 · 177 阅读 · 0 评论 -
bzoj4182: Shopping【点分治+单调队列优化多重背包】
题目大意:给定一棵有 n 个点的树,第 i 个点有 di 件商品,价格为 ci,价值为 wi。 你手头有 m 块钱,且你要保证你买过的点在树上互相连通,问买到的物品的总价值最多是多少。 1 ≤ n ≤ 500, 1 ≤ m ≤ 4000, di ≤ 100。 解题思路:如果直接树形dp是O(nm2d)O(nm2d)O(nm^2d)的,显然过不了考虑如果强制要选一个点怎么做。 ...原创 2018-05-17 21:35:18 · 502 阅读 · 0 评论 -
hihoCoder Challenge 29 D. 不上升序列【动态规划+折线+堆】
题目大意:给出一个整数序列,可以花费1的代价把一个数+1或1,求把它变成不上升序列的最小代价。n&lt;=500000;令 fi(x)fi(x)f_i(x) 为前个数,调整出最大值不超过 xxx 的最小代价,那么 fifif_i 是一条不升的折线 考虑转移 fi(x)=miny≤xfi−1(y)+|ai−y|fi(x)=miny≤xfi−1(y)+|ai−y|f_i(x)=\te...原创 2018-05-18 08:39:42 · 241 阅读 · 0 评论 -
UOJ#205. 【APIO2016】Fireworks【动态规划+折线优化+可并堆】
题目大意:给出一棵树,边有边权,可以花费1的代价把一条边的权值加1或者1,不能减到负的。 要让根到所有叶子的边权和都相等。问最小代价。 n&amp;lt;=600000解题思路:设 fx(i)fx(i)f_x(i) 表示 xxx 的子树中的叶子到 xxx 距离全部搞成 iii 的最小代价。 设 gx(i)gx(i)g_x(i)表示 xxx 的子树中的叶子到 faxfaxf...原创 2018-05-18 11:32:10 · 326 阅读 · 0 评论 -
Atcoder2292 Division into Two 【动态规划优化】
题目描述:有一个包含N个不同整数的集合,其中第i小的元素是Si。我们希望把它划分成两个集合X和Y,使得:集合X中任意两个相邻元素的差不小于A。 集合Y中任意两个相邻元素的差不小于B。共有多少种不同的划分方式呢?输出答案对10^9+7取模后的结果。注意集合X或Y可以为空集。1≤N≤10^5解题思路:先排序。 很好想到O(n2)O(n2)O(n^2)的dp,f[i][j]f...原创 2018-05-12 11:02:40 · 322 阅读 · 0 评论 -
AtCoder[ARC073F] Many Moves【动态规划优化+线段树】
题目描述:有N个方格排成一排,它们按从左到右的顺序被编号为1,2,…,N。你有两个硬币,开始时分别被放在格A,B上,接下来你要按照顺序完成Q次操作:给定一个正整数xi,你要选出两枚硬币中的一枚移动到第xi格上。注意,你需要花费1s的时间将硬币移动一格。也就是说,将某一枚硬币从第X格移动到第Y格需要花费|X−Y|秒。你的任务是在最短的时间内完成所有的操作。你只能根据给定的操作...原创 2018-05-12 14:46:53 · 964 阅读 · 0 评论 -
bzoj5286: [Hnoi2018]转盘【线段树】
传送门解题思路:首先有结论:最优方案一定是在某个起点等一会儿,然后一口气走完一圈,即先把原序列倍增: ans=minni=1{maxi+n−1j=i{Tj−(j−i)}+n−1}ans=mini=1n{maxj=ii+n−1{Tj−(j−i)}+n−1}ans=min_{i=1}^n\{max_{j=i}^{i+n-1}\{T_j-(j-i)\}+n-1\} 也等于: ans=min...原创 2018-05-08 17:16:24 · 202 阅读 · 0 评论 -
bzoj4609: [Wf2016]Branch Assignment
Description要完成一个由s个子项目组成的项目,给b(b&gt;=s)个部门分配,从而把b个部门分成s个组。分组完成后,每一组的任意两个点之间都要传递信息。假设在(i,j)两个点间传送信息,要先把信息加密,然后快递员从i出发到总部,再加密,在到j点。出于安全原因,每次只能携带一条消息。现在给出了道路网络、各个部门和总部的位置,请输出快递员要走的最小总距离。Input第一行包含四...原创 2018-05-15 19:53:24 · 499 阅读 · 0 评论 -
loj#2537. 「PKUWC 2018」Minimax【概率dp+线段树合并】
传送门解题思路:感觉自己当时好菜啊……设 fu,ifu,if_{u,i} 为 uuu 选 iii 的概率,假如是从左子树转移来的,则fu,i=fl,i(p∑fr,j<i+(1−p)∑fr,j>i)fu,i=fl,i(p∑fr,j<i+(1−p)∑fr,j>i)f_{u,i}=f_{l,i}(p\sum f_{r,ji}) 然后想到线段树合并,节点表示选当前区...原创 2018-05-29 07:53:38 · 1092 阅读 · 0 评论 -
loj#2325. 「清华集训 2017」小 Y 和恐怖的奴隶主
传送门解题思路:设 p[i][j][k][l]p[i][j][k][l]p[i][j][k][l] 表示 iii 回合奴隶主 1、2、31、2、31、2、3 血剩余情况为 j、k、lj、k、lj 、k 、l 的概率,那么对答案的贡献就是 p[i][j][k][l]j+k+l+1p[i][j][k][l]j+k+l+1\frac{p[i][j][k][l]}{j+k+l+1} 。先预...原创 2018-05-24 20:54:22 · 593 阅读 · 0 评论 -
bzoj5250 九省联考 秘密袭击【树上背包+拉格朗日插值+线段树合并】
解题思路:第一个想法是枚举第kkk大的值,把大于的记为1,小于的记为0,问题就转化为树上联通块大小等于kkk的个数。稍微转化一下,我们统计树上联通块第kkk大大等于iii的个数,不妨记为aiaia_i,那么 ans=∑i=1Wi(ai−ai+1)ans=∑i=1Wi(ai−ai+1)ans=\sum\limits_{i=1}^Wi(a_i-a_{i+1})而因为这样计算每个大等于ii...原创 2018-04-18 17:17:11 · 785 阅读 · 0 评论 -
bzoj4944: [Noi2017]泳池【概率dp+特征多项式】
题目大意:有一个1001×n1001×n1001×n的的网格,每个格子有qqq的概率是安全的,1−q1−q1−q的概率是危险的。 定义一个矩形是合法的当且仅当: 1.这个矩形中每个格子都是安全的 2.必须紧贴网格的下边界 问你最大的合法子矩形大小恰好为kkk的概率是多少。解题思路:首先求恰好为kkk的概率一般转化为求≤k≤k\le k的概率减去≤k−1≤k−1\le k-1...原创 2018-04-09 20:05:48 · 662 阅读 · 0 评论 -
BJ模拟 装饰地板【状压dp+特征多项式优化矩阵快速幂】
题目大意:给一个m∗nm∗nm*n的地板,有s1s1s1种1×21×21\times2的横地砖,s2s2s2种2×12×12\times 1的竖地砖,问有多少种铺满的方式,对998244353取模。 (m≤6,n≤102501,s1,s2≤1e9)(m≤6,n≤102501,s1,s2≤1e9)(m\le 6,n\le 10^{2501},s1,s2\le 1e9)解题思路:看到...原创 2018-03-15 20:18:22 · 322 阅读 · 0 评论 -
bzoj1010 玩具装箱 【决策单调性优化dp】
算是一道模板题。 我们可以先得到朴素的dp方程:f[i]=min(f[j]+w(j,i)),j∈\in[0,i)。 w(j,i)表示将j+1~i打包运输的费用,时间复杂度为O(n2n^2)。 然后打表可发现满足决策单调性,所以就可以用单调队列维护决策点,二分查找每个点作为决策点的区间即可,时间复杂度为O(nlogn)。 不能在枚举时用直接判断j+1是否比j更优的方式移动决策点,如:f[0]=原创 2017-10-12 11:22:03 · 565 阅读 · 1 评论 -
bzoj1023 仙人掌图【仙人掌&&树形dp】
解题思路:f[i]表示以i为根的子树中i为起点的最长链。若(u,v)是桥,则ans=max(ans,f[u]+f[v]+1)(此时f[u]还未被f[v]更新),接着f[u]=max(f[u],f[v]+1);这也是树的直径的一种解法。若u是环上的一个点,设该环大小为cnt,则ans=max(ans,f[u]+f[v]+dis(u,v))其中v也为该环上一点且dis(u,v)<=cnt/2(不然就走环原创 2017-11-22 16:52:47 · 327 阅读 · 0 评论 -
bzoj1942 货币兑换【动态规划+CDQ分治】
解题思路:转自 www.cnblogs.com/zig-zag/archive/2013/04/24/3039418.html 稍稍加上个人见解(括号中)。经典的1D1D动态规划题目,标准做法是平衡树维护凸壳,但实际上还有更简洁的分治法。首先分析一下题目,对于任意一天,一定是贪心地买入所有货币或者卖出所有货币是最优的,因为有便宜我们就要尽量去占,有亏损就一点也不去碰。于是我们得到方程:f[i]=m原创 2017-12-19 21:24:37 · 443 阅读 · 0 评论 -
bzoj4559 成绩比较【动态规划+拉格朗日插值法】
解题思路:我们设f[i][j]f[i][j]表示前ii门课,共有jj个人没有被碾压的方案数,那么答案即为f[m][n−1−k]f[m][n-1-k]假设从f[i−1][w]转移到f[i][j](j≥w)f[i-1][w]转移到f[i][j](j\ge w) 没被碾压的人数本应增加Ri−1R_i-1人,但其中有一部分可能之前就没被碾压了。 则有t1=j−wt_1=j-w个人是新增的人数,要从n−1原创 2017-12-12 08:39:46 · 1021 阅读 · 0 评论 -
bzoj1597 土地购买【斜率优化dp】
解题思路:我们先将土地按xx值排序。 很容易得到一个O(n2)O(n^2)的dp方程: f[i]=min(f[j−1]+x[i]∗max(y[k]),1≤j≤i,j≤k≤if[i]=min(f[j-1]+x[i]*max(y[k]),1\le j\le i,j\le k \le i, 处理j时倒着循环,每次就可以O(1)得到max(y[k])max(y[k])了。其实我们可以把每块土地看做平面原创 2017-12-04 11:12:30 · 330 阅读 · 0 评论 -
TC srm518 Nim【动态规划+FWT】
题目大意:求符合以下条件的序列个数: 1:长度为K 2:每个元素大小不超过L 3:每个数都是质数 4:所有数异或和为0 K≤109,L≤50000K\le10^9,L\le 50000 答案对109+710^9+7取模;解题思路:我们设f[i][j]表示序列长度为i,异或和为j的方案数,那么 f[i][x ^ y]=f[i-1][x] * f[1][y]。可以发现这个式子是符合FWT原创 2017-12-27 15:20:00 · 581 阅读 · 0 评论 -
bzoj3688 折线统计【动态规划+扫描线+树状数组】
解题思路:设f[i][j][0/1]f[i][j][0/1]表示到第ii个点,已有jj段,最后一段是上升/下降趋势的方案数,那么有: f[i][j][0]=∑(f[k][j][0]+f[k][j−1][1])(ki,a[k].y>a[i].y)f[i][j][0]=\sum(f[k][j][0]+f[k][j-1][1])(ka[i].y) f[i][j][1]=∑(f[k][j][1]+原创 2018-01-21 11:08:50 · 345 阅读 · 0 评论 -
hdu5564 Clarke and digits【数位dp+矩阵快速幂】
题目大意:求长度在[l,r][l,r]之间的能被7整除且相邻数位之和不为kk的正整数有多少个。 1≤l,r≤1091\le l,r \le10^9解题思路:设f[x][i][j]f[x][i][j]表示第x位为j,模7余数为i的方案数,那么易得转移方程:f[x+1][(i∗10+k)f[x+1][(i*10+k)%7][k]+=f[x][i][j]7][k]+=f[x][i][j]。原创 2018-01-04 21:28:48 · 284 阅读 · 0 评论 -
hdu4117 GRE Words【AC自动机+动态规划+线段树】
题目大意:给定n个字符串,要求按顺序取一些字符串,满足后一个字符串是前一个字符串的子串,要求使得取出的权值和最大。解题思路:先建出AC自动机,设f[i]f[i]表示选第ii个串做结尾的最大价值,那么有: f[i]=max(f[j])+w[i](ji并且j是i的子串)f[i]=max(f[j])+w[i](j找max(f[j])max(f[j])最朴素的方法就是沿着单词ii的每原创 2018-01-23 19:26:15 · 323 阅读 · 0 评论 -
bzoj3594: [Scoi2014]方伯伯的玉米田【动态规划+二维树状数组优化】
Description方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。 这排玉米一共有N株,它们的高度参差不齐。 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。 方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。原创 2018-02-01 12:04:27 · 227 阅读 · 0 评论 -
bzoj1563: [NOI2009]诗人小G【决策单调性优化dp】
解题思路:这道题类似于bzoj1010玩具装箱,只不过从计算平方变成了计算p次方,计算式变化复杂,不能再用斜率dp,但决策单调性还是有的,所以直接二分维护每个决策的控制区间即可。注意要用long double.#include#define ll long doubleusing namespace std;int getint(){ int i=0,f=1;char原创 2018-01-08 23:01:54 · 287 阅读 · 0 评论 -
hdu2243考研路茫茫——单词情结 【AC自动机+动态规划+矩阵快速幂】
这道题就是bzoj1030的翻版,那道题题解见这里。还是用总方案数减去一个单词都不包含的方案数,只不过节点很少,不到30个,就可以用矩阵快速幂优化。不过注意要求的是长度小于L的,所以矩阵多开一维记录前缀和,总方案数也变成了260+261+262+……+26L" role="presentation" style="position: relative;">260+2原创 2018-01-25 22:51:57 · 290 阅读 · 0 评论 -
bzoj3675: [Apio2014]序列分割【斜率优化dp】
Description小H最近迷上了一个分隔序列的游戏。在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列); 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。 每次进行上述步骤之后,...原创 2018-02-10 17:43:35 · 254 阅读 · 0 评论 -
bzoj3456 城市规划【生成函数+多项式求逆元】
解题思路我们设f(n)f(n)表示nn个点组成有编号无向连通图的方案数,但不是很好直接求。那再设g(n)g(n)表示nn的点组成有编号无向图的方案数,由于无向图是由多个连通子图构成,那么为了避免重复计数,我们枚举1号点所在连通块大小,其他边随便连,即可得到dp方程:g(n)=∑i=1nCi−1n−1f(i)∗g(n−i)g(n)=\sum\limits_{i=1}^nC_{n-1}原创 2018-01-16 20:47:43 · 311 阅读 · 0 评论 -
bzoj1855 SCOI2010 股票交易【单调队列优化dp】
解题思路:很容易想到dp[now][i]" role="presentation">dp[now][i]dp[now][i]dp[now][i]表示第now天拥有i张股票赚的最多的钱,那么转移方程为: 1.不交易: dp[now][i]=dp[now−1][i]" role="presentation">dp[now][i]=dp[now−1][i]dp[now][i]=dp原创 2017-10-25 19:40:16 · 445 阅读 · 0 评论 -
hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活【单调队列优化多重背包】
解题思路:题目就是求裸的多重背包。 朴素的多重背包是O(n3)" role="presentation">O(n3)O(n3)O(n^3),但用单调队列可以优化到O(n2)" role="presentation">O(n2)O(n2)O(n^2). dp方程为: f[j+k∗w[i]]=max(f[j+l∗w[i]]+(k−l)∗原创 2018-02-06 21:04:46 · 310 阅读 · 0 评论 -
loj#2326. 「清华集训 2017」简单数据结构【动态规划+set】
传送门解题思路:感觉复杂度是证不来的……不过跑得挺快…… 注意序列长度不超过20,所以也比较暴力,就是记录每个值的位置,以每个点开头的最长长度和每个长度对应的最小结尾位置,用set维护以每个点为结尾的最长序列开头位置,用桶维护答案……向左加就枚举倍数更新,向右加就枚举约数更新……#include&lt;bits/stdc++.h&gt;using namespace std;in...原创 2018-05-31 11:27:46 · 878 阅读 · 0 评论