
动态规划
文章平均质量分 54
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
BZOJ 4300 绝世好题 动态规划
题目大意:给定一个序列aa,求一个子序列bb使得bi and bi−1=0b_i\ and\ b_{i-1}=0且|b||b|最大傻逼题。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 100100using namespace std;int n,ans;int f原创 2015-10-20 14:48:47 · 3226 阅读 · 1 评论 -
BZOJ 2287 POJ Challenge 消失之物 分治+背包
题目大意:给定n个物品,每个物品有一个体积,对于所有的1≤i≤n,1≤j≤m1\leq i\leq n,1\leq j\leq m输出在不使用第ii个物品的情况下装满大小为jj的背包的方案数我这傻逼居然真的去写了分治背包…… 第i个物品存在的时间为[1,i−1][1,i-1]和[i+1,n][i+1,n]两个区间 然后分治…… 时间复杂度O(n2logn)O(n^2logn) 黄学长我仰慕您原创 2015-05-27 20:18:44 · 2104 阅读 · 0 评论 -
BZOJ 1742 Usaco2005 nov Grazing on the Run 边跑边吃草 动态规划
题目大意:给定一个数轴,初始在位置pp,有nn坨草(n≤3000n\leq 3000),约瑟芬需要吃掉所有的草,定义一坨草的腐败值为吃掉的时间,求最小腐败值之和 容易证明任何时刻约瑟芬吃掉的草都是一个区间。(废话,难道还能路过草不吃?) 因此令fi,j,kf_{i,j,k}表示已经吃掉了以i开头的j坨草,当前在左端点/右端点的最小腐败值之和(包括被吃掉的和未被吃掉的,当然被吃掉的腐败值就不会再涨原创 2015-05-03 14:58:49 · 1689 阅读 · 0 评论 -
BZOJ 1194 HNOI2006 潘多拉的盒子 BFS+Tarjan+拓扑序DP
题目大意:给定一些自动机,如果某个自动机AA能产生的所有串都能在自动机BB中产生,则称BB是AA的一个升级,求最长链 这题TM有毒 数据范围5050,暴力枚举每一对点之间的关系,然后Tarjan缩点求最长链就行了 现在对于一对自动机AA和BB,我想知道AA能产生的所有串是否都能在BB中产生,那么BFS就可以了 我们用一个二元组(x,y)(x,y)表示走了某个串后AA走到了节点xx,BB走到了原创 2015-04-27 18:51:57 · 3459 阅读 · 0 评论 -
BZOJ 3997 TJOI2015 组合数学 Dilworth定理
题目大意:给定一个网格图,每次从左上角出发,只能往右或往下走,最后到达右下角,每个格子有最低经过次数,问最少走几次 Dilworth定理:DAG的最小链覆盖=最大点独立集 最小链覆盖指选出最少的链(可以重复)使得每个点都在至少一条链中 最大点独立集指最大的集合使集合中任意两点不可达 此题中最大点独立集显然是一个集合满足集合中任意两点都是左下-右上的关系 DP一遍就能出解 复杂度O(Tmn)原创 2015-04-21 15:53:03 · 3788 阅读 · 0 评论 -
BZOJ 4011 HNOI2015 落忆枫音 拓扑序DP
题目大意:给定一张有向无环图,现在要求加入一条边,求加入后以1为根的树形图个数 首先不考虑加入的这条边,那么这个图是一个DAG 由朱刘算法的推论可知,如果除根节点外每个点都选择一条入边,由于没有环,因此一定会形成一个树形图 因此答案就是∏ni=2degreei\prod_{i=2}^ndegree_i 其中degreeidegree_i表示第ii个点的入度 现在加入这条边之后,我们仍然可以套原创 2015-04-22 13:49:30 · 5050 阅读 · 1 评论 -
BZOJ 1111 POI2007 四进制的天平Wag 高精度+动态规划
题目大意:给定一个数n,要求将n表示成一些四进制数之和/差的形式,要求用的数最少,求方案数光棍节快乐(巨雾我们将n分解成4进制,从低位到高位考虑如果这一位是0,显然不用考虑这位如果这一位是1,显然从0开始往上加一个比较优,因为如果从0开始减掉3个还不如将高位-1然后把这一位+1如果这一位是2,要么从0开始加两个,要么从0开始减掉两个如果这一位是3,那么一定从0开始往下减一个原创 2015-03-24 17:52:11 · 1904 阅读 · 0 评论 -
BZOJ 2024 SHOI2009 舞会 动态规划+容斥原理+高精度
题目大意:给定两个序列,求有多少个匹配满足a[i]见http://blog.youkuaiyun.com/popoqqq/article/details/44514113高精度已废。。。#include #include #include #include #include #define M 202using namespace std;struct Big_Int{ #defi原创 2015-03-21 15:21:40 · 2184 阅读 · 0 评论 -
BZOJ 3622 已经没有什么好害怕的了 动态规划+容斥原理
题目大意:给定两个长度为n个序列,保证这2n个数字两两不同,求有多少匹配满足a[i]>b[i]的数对数比a[i]もう何も怖くない题解:http://www.cnblogs.com/dyllalala/p/3900077.htmlOTZ神思路根本就是想不到啊QAQでも。。。もう何も怖くない。。。(大雾此外我们可以引入一下WTY公式:C[i][j]=C[i-1][j]*原创 2015-03-21 10:48:46 · 3493 阅读 · 0 评论 -
BZOJ 2072 POI2004 MOS 动态规划+贪心
题目大意:过桥问题我们考虑利用时间最小的两个人倒运,把时间大的人依次送过去有两种方式:1.时间最小的人和时间最大的人过去,然后时间最小的人把火把拿回来2.时间最小和第二小的两个人过去,然后时间最小的人把火把拿回来;接着时间最大和第二大的两个人过去,时间第二小的人把火把拿回来为了保证最优 运输应该不外乎这两种形式那么令f[i]表示当前没有过桥的人还剩i个时的最短时间 DP即可原创 2015-03-09 14:38:21 · 1701 阅读 · 0 评论 -
BZOJ 3163 Heoi2013 Eden的新背包问题 多重背包
题目大意:多重背包,多次询问某个物品不能选择时以某个总价钱最多能获得多少价值求问正解是啥QAQ维护一个前缀多重背包和一个后缀多重背包每次询问时 枚举前面选多少和后面选多少 暴力统计答案即可时间复杂度O(n^2logn+nq) 这3E的复杂度居然只跑了600sQAQ正解到底是啥QAQ#include #include #include #include #define原创 2015-03-06 11:56:03 · 2467 阅读 · 6 评论 -
BZOJ 3782 上学路线 动态规划+Lucas定理
题目大意:给定一张N∗MN*M的网格图,有TT个坏点,求左上角走到右下角的方案数对PP取模后的值首先把坏点和终点以xx坐标为第一键值,yy坐标为第二键值排序 令fif_i表示从原点不经过任何坏点走到第ii个点的个数,那么有DP方程: fi=Cxixi+yi−∑xj<=xi,yj<=yiC(xi−xj)(xi−xj)+(yi−yj)∗fjf_i=C_{x_i+y_i}^{x_i}-\sum_{x_原创 2015-05-28 13:51:14 · 2602 阅读 · 0 评论 -
codeforces 321E Ciel and Gondolas 四边形不等式
题目大意:给定nn个人,需要分kk次过河,两个人i,ji,j如果同乘一条船就会产生ai,ja_{i,j}的代价,求最终代价的最小值这个玩应显然满足四边形不等式(虽然我并不知道这个不等式是啥 然后就是决策单调(虽然我并不知道为何满足四边形不等式一定决策单调 然后就能分治做辣。。。 定义Solve(l,r,optl,optr)Solve(l,r,opt_l,opt_r)表示当前在处理区间[l,r]原创 2015-06-17 18:45:28 · 2275 阅读 · 0 评论 -
BZOJ 1563 NOI2009 诗人小G 四边形不等式
题目大意:玩具装箱,然而指数变成了pp(p≤10p\leq10)首先我们需要证明决策单调 由于数死早,还是戳这里吧知道决策单调之后怎么办呢? 由于是1D1D,所以不能分治了每个决策点能决策的区间一定是连续的一段 并且随着决策点的右移 这个区间也在不断右移令g[j]g[j]表示决策点jj能贡献的最左侧的位置 然后我们开一个栈来维护当前存在贡献的贡献点 那么显然stack[i]stack[i]原创 2015-06-18 12:38:56 · 2547 阅读 · 0 评论 -
BZOJ 4922 Karp-de-Chant Number 动态规划
题目大意:给出一些括号序列,要求选择一些括号序列拼接成一个合法的括号序列,使得总长最大套路大集合……首先对于每个括号序列,把左边的左括号和右边的右括号对消,最后能得到一坨这样的东西: ))…))((…(( 就是xx个右括号然后yy个左括号,记作(x,y)(x,y)然后考虑假如我们的子集选好了,我们要按照什么顺序拼接才能拼成一个合法的括号序列呢?BZOJ3709 能拼必须满足当前左括号数≥x\g原创 2017-06-20 16:27:25 · 2472 阅读 · 2 评论 -
BZOJ 4726 POI2017 Sabota? 树形DP
题目大意:给出一棵nn个点的有根树,初始某个点是叛徒,接下来如果某一时刻某个节点的子树除自己以外的节点中,叛徒的比例超过了xx,那么这一整棵子树都会变成叛徒,求xx的最小值使得最坏情况下叛徒数量不会超过kk。老年选手复健中……结论1.最坏情况下初始叛徒一定是一个叶节点 证明:显然如果初始叛徒不能策反它的父亲那它就不能策反任何节点了 假设初始叛徒为pp,pp有一个儿子qq,pp能够策反它的父亲fa原创 2016-12-09 00:22:04 · 1395 阅读 · 2 评论 -
BZOJ 2963 麻将 DFS+动态规划
题目大意:给定一副不全的麻将,从中摸取1414张,求和牌的概率,牌型包括一般牌型/七対子/国士無双这傻逼题我从昨天中午写到现在……答案是分数形式,我们求出和牌的方案数和总方案数C14nC_n^{14},约分一下即可 比较好的一件事情就是C14n≈4.25∗1018C_n^{14}≈4.25*10^{18},刚好不爆long long由于和牌牌型分为三类,所以一般的思路是分别计算三类牌型的概率,然后原创 2015-10-15 01:31:28 · 2952 阅读 · 1 评论 -
BZOJ 2021 Usaco2010 Jan Cheese Towers 动态规划
题目大意:完全背包,如果最顶端的物品重量≥k\geq k,那么下面的所有物品的重量变为原来的45\frac45 考虑一些物品装进背包,显然我要把所有重量大于≥k\geq k的物品中重量最小的那个放在最顶端,才能保证总重量最小 那么我们给物品排个序,第一键值为重量是否≥k\geq k(≥k\geq k的放在前面),第二键值为重量(从小到大) 然后依次加入背包,令fif_i表示没有重量≥k\geq原创 2015-06-05 16:49:52 · 1593 阅读 · 0 评论 -
BZOJ 2302 HAOI2011 Problem c 动态规划
题目大意:给定nn个人和nn个位置,要求生成一个序列aia_i,然后第1...n1...n个人依次走到第a1...na_{1...n}个位置,如果那个位置已经有人了就走到下一个位置,直到找到一个空位,坐下。如果找完第nn个座位还是没有找到就称这个序列不合法 现在已经确定了一些aia_i,求合法序列的数量一个序列合法等价于编号≤i\leq i的人至少有ii个 然后就可以DP辣。。。 令fi,jf原创 2015-08-26 20:51:26 · 2160 阅读 · 0 评论 -
BZOJ 3864 Hero meet devil DP套DP
题目大意:给定一个长度为n(n≤15)n(n\leq 15)的基因序列SS,求对于每个i(0≤i≤n)i(0\leq i\leq n)有多少长度为m(m≤1000)m(m\leq1000)的基因串TT满足SS与TT的LCSLCS为ii考虑LCSLCS怎么求 fi,jf_{i,j}表示TT的前ii位和SS的前jj位的LCSLCS 我们发现每一行之和上一行的状态有关那么在这个问题中,我们令fi,jf原创 2015-07-10 09:30:50 · 3049 阅读 · 0 评论 -
BZOJ 2216 Poi2011 Lightning Conductor 动态规划
题目大意:给定一个序列aia_i,对于每一个ii求⌈max{aj+|i−j|−−−−−√}−ai⌉\lceil max\{ a_j+\sqrt{|i-j|}\}-a_i\rceil看了题解才知道是决策单调性。。。 那我这个做法可以算是乱搞了? (似乎这个做法也可以拓展到所有满足决策单调性的1D1D上?)显然我们可以做两遍,第一遍只考虑j<ij<i,第二遍只考虑j>ij>i 首先根号这东西有个性原创 2015-06-30 21:34:52 · 2346 阅读 · 0 评论 -
BZOJ 3233 Ahoi2013 找硬币 动态规划
题目大意:给定nn个数,求一种混合进制使得每个数各个位之和之和最小 令fif_i表示表示最大硬币面值为ii时零头部分(即ak mod ia_k\ mod\ i部分)的最小硬币数 那么有转移方程:fj=min{fi+∑nk=1⌊ak mod ji⌋}(i|j)f_j=min\{f_i+\sum_{k=1}^n\lfloor\frac{a_k\ mod\ j}i\rfloor\}(i|j) 然后a原创 2015-06-09 18:29:44 · 1606 阅读 · 0 评论 -
BZOJ 2091 Poi2010 The Minima Game 动态规划
题目大意:给定nn个数,两个人轮流取,每次可以取走任意一些数,获得的分值是这些数中的最小值 两个人都想让自己的分值-对方的分值最大,求最终先手得分-后手得分显然每个人取走的都是当前剩下的数中最大的一些数 那么考虑倒着做,令fif_i表示剩余最小的ii个数时先手-后手的最大差值 那么有DP方程fi=max{aj+1−fj}(0≤j<i)f_i=max\{a_{j+1}-f_j\}(0\leq j原创 2015-06-28 19:40:48 · 1713 阅读 · 0 评论 -
BZOJ 1042 HAOI2008 硬币购物 背包+容斥原理
题目大意:给定4种硬币的面值,多次询问这个限定这四种硬币的个数时达到某一价值的方案数十分巧妙的一个题……蒟蒻表示打死也想不到容斥原理0.0首先先求出不限定硬币的方案数 然后利用容斥原理ans=不限定硬币的方案数-(硬币1超出的方案数+硬币2超出的方案数+硬币3超出的方案数+硬币4超出的方案数)+(硬币1和硬币2都超出的方案数+……)-(硬币123都超出的方案数+……)+四种硬币都超出的原创 2014-10-22 16:20:33 · 1881 阅读 · 0 评论 -
BZOJ 3357 Usaco2004 等差数列 动态规划
题目大意:给定一个长度为n的序列,求最大等差子序列令f[i][j]表示当前等差数列最后一个数为a[i],倒数第二个数为j的最长长度则有f[i][a[j]]=max{2,f[j][a[j]*2-a[i]]+1}注意n=1时输出1时间复杂度O(n^2logn)#include #include #include #include #include #define M 20原创 2015-03-05 15:06:19 · 1911 阅读 · 2 评论 -
BZOJ 1133 POI2009 Kon 动态规划
题目大意:给定n个站点,每个人都会在某个站点上车并在之后的某个站点下车,查票员可以在两个站点之间查票,问查票k次最多查到多少人壮哉我大轻音部(误令f[i][j]表示当前在第i个点和第i+1个点之间查票,已经查了j次的最大收益枚举上一次查票的位置,统计比上一次能多查出来的人数即可时间复杂度O(kn^2) 输出方案记录一下上一次查票的位置即可由于没有SPJ所以要输出字典序最小的方案原创 2015-03-05 12:42:16 · 1715 阅读 · 0 评论 -
BZOJ 1087 SCOI2005 互不侵犯King 状压DP
题目大意:给定n*n的国际象棋棋盘,在上面放k个国王,要求国王之间互不攻击,求方案数n状压DP,将每一行的方案二进制压成一维,令f[i][j][k]为第i行用去j个国王状态为k的方案数,然后状态转移如下:f[i][j][k]=Σf[i-1][j-digit[k]][l]其中l&k=0,l>>1&k=0,l暴力转移即可记得开long long#include#inc原创 2014-10-13 12:56:51 · 1552 阅读 · 0 评论 -
BZOJ 1806 IOI2007 Miners 矿工配餐 动态规划
题目大意:将一个123序列拆分为两个子序列,定义每个数的贡献值为以这个数结尾的长度最大为3的子串中不同数的数量,求贡献值和的最大值令f[i][a1][a2][b1][b2]为前i个数分成两组,第一组以a1 a2结尾,第二组以b1 b2结尾的最大贡献值 转移啥的自己YY吧 记得开滚动数组尼玛写错个参数都要调半天……#include#include#include#includeu原创 2014-11-14 11:50:07 · 1978 阅读 · 0 评论 -
BZOJ 1044 HAOI2008 木棍分割 二分答案+动态规划
题目大意:给定n个连在一起的木棍,分成m+1段,使每段最大值最小,求最大值的最小值及最大值最小时分割的方案数第一问水爆了……二分答案妥妥秒过第二问就有些难度了 首先我们令f[i][j]表示用前j个棒♂子得到i段的方案数诶我没打什么奇怪的符号吧于是我们有动规方程f[i][j]=Σf[i-1][k] (sum[j]-sum[k]这个最坏情况下是O(m*n^2)的,肯定挂原创 2014-10-28 15:35:15 · 1707 阅读 · 0 评论 -
BZOJ 1032 JSOI2007 祖码Zuma 动态规划
题目大意:给定一个祖玛序列,任选颜色射♂出珠子,问最少射♂出多少珠子输入法最近越来越奇怪了0.0据说数据有误 但其实MS问题不大首先我们把连续相同的珠子都缩在一起 令f[i][j]表示从i开始的j个珠子的最小消除次数初值 f[i][1]=cnt[i]==1?2:1然后对于每个区间,我们枚举中间点,拆成两半求和如果这个区间两端点颜色相同,我们还可以把中间消掉,然后两边再补射1原创 2014-10-29 09:41:27 · 3777 阅读 · 2 评论 -
BZOJ 1260 CQOI2007 涂色paint 动态规划
题目大意:给定一块木板,上面每个位置有一个颜色,问最少刷几次能达到这个颜色序列动态规划,可以先去重处理(其实没必要),令f[i][j]代表将i开始的j个位置刷成相应颜色序列的最小次数,然后状态转移如下:若s[i]==s[j] 则f[i][j]=min(f[i-1][j],f[i][j-1]) 即将i与右半部分并成一刷子,或者将j与左半部分并成一刷子若s[i]!=s[j] 则f[i][j原创 2014-10-10 10:14:05 · 1893 阅读 · 2 评论 -
BZOJ 1264 AHOI2006 基因匹配Match 动态规划+树状数组
题目大意:给定n个数和两个长度为n*5的序列,每个数恰好出现5次,求两个序列的LCSn所以我们考虑LCS的一些性质LCS的决策+1的条件是a[i]==b[j] 于是我们记录a序列中每个数的5个位置扫一下b[i] 对于每个b[i]找到b[i]在a中的5个位置 这5个位置的每个f[pos]值都可以被b[i]更新 于是找到f[1]到f[pos-1]的最大值+1 更新f[pos]即可这原创 2014-10-10 10:37:54 · 2499 阅读 · 0 评论 -
BZOJ 1025 SCOI2009 游戏 动态规划
题目大意:给定n,定义一个置换的排数为1~n的循环经过这个置换最少T次(T>0)可以回到原来的序列 求所有可能的排数的数量将一个置换分解为一些循环,那么这个置换的排数就是这些循环的长度的最小公倍数于是对于一个数,我们验证这个数是否是排数的方式就是将这个数分解质因数,令x=p1^a1*p2^a2*...*pk^ak,若p1^a1+p2^a2+...+pk^ak分组背包即可 令f[i][j原创 2014-10-28 10:56:04 · 1821 阅读 · 0 评论 -
BZOJ 1564 NOI2009 二叉查找树 动态规划
题目大意:给定一棵完全性质的treap,定义代价为每个点的访问频率*深度之和 我们可以花K的代价改变一些点的权值 求最小总代价改变后的权值不能相同 但是由于可以改成任意实数 而且代价与更改的大小无关 所以其实相同与否无所谓了首先键值是不能更改的 而一棵平衡树的中序遍历保证键值递增 故中序遍历一定 我们先按照键值排序得到中序遍历w很大 但是保证不重复 所以我们将w离散化然后就是DP的原创 2014-09-17 21:04:28 · 1983 阅读 · 0 评论 -
BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度
题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每个非叶节点都有恰好n个子节点的树给定n和d,求深度为d的严格n元树一共有多少种此题的递推部分并不难 首先我们设深度为i的严格n元树一共有f[i]种 令S[i]为f[i]的前缀和我们不难发现一棵深度为i以下的严格n元树由两部分组成:一个根节点,n棵子树,其中每棵子树的深度不超过i-1每棵子树有S[i-1]种原创 2014-10-05 11:06:26 · 1961 阅读 · 0 评论 -
POJ 3208 Apocalypse Someday 二分答案+数位DP
这题应该是POJ最强大的一道数位DP了吧 正解是AC自动机 不会 还是写数位DP吧题目大意:我们令含有666的数字为不吉利数字,则可以得到一个递增数列:{an}=666,1666,2666,3666,4666,5666,6660,6661,....给定n,求an首先我们把这个问题转化成另一个问题:给定n,求1~n中有多少个数含有666解决了这个问题,把原问题二分答案即可首先原创 2014-09-16 16:33:22 · 2727 阅读 · 0 评论 -
BZOJ 1055 HAOI2008 玩具取名 动态规划
题目大意:给定一个由‘W','I','N','G'构成的字符串,给定一些规则,这些规则可以将两个字符合成为一个,例如"II"可以合成为'W',"WW"可以合成为'I'或者'N'求这个字符串可以最终合成为哪几种字符看到这题我想到了广搜。。。其实没必要,动归完全可以解决令f[i][j][k]为从i开始的j个字符是否可以合成为字符[k]然后j从外层循环,剩下的全部预处理,怎么暴力怎么转移原创 2014-10-04 16:06:51 · 1727 阅读 · 0 评论 -
BZOJ 1867 NOI1999 钉子和小球 动态规划
题目大意:给定一个钉子阵,小球从最上方的钉子释放,求到达最底端某个位置的概率只需要DP就好了 f[i][j]表示小球落在第i行第j个钉子上的概率如果一个点有钉子 f[i+1][j]和f[i+1][j+1]平分这个点的概率如果一个点没有钉子 f[i+2][j+1]得到这个点的全部概率最后输出f[n+1][m+1]即可 注意不能输出回车 否则PE无视这凶残的结构体操作符重载吧0.0原创 2014-10-16 11:06:49 · 2029 阅读 · 0 评论 -
BZOJ 1003 ZJOI2006 物流运输trans 动态规划+SPFA
题目大意:给定一个无向图,运输n天,其中有些天有些点不能走,更换路线代价为k,求代价总和首先令cost[i][j]为第i天到第j天都走同一路线的最小花销 这个用SPFA处理然后就是动规的问题了 令f[i]为1~i天的最小花销则f[i]=min{ f[j]+cost[j+1][i]+k } ( 0注意m和n别写反乘天数之前要特判是不是正无穷#include#include原创 2014-10-16 16:45:18 · 2558 阅读 · 0 评论 -
BZOJ 1531 POI2005 Bank notes 多重背包
题目大意:多重背包一大早就水了个题233#include #include #include #include #define M 20200using namespace std;int n,k,b[220],c[220];int f[M];int main(){ int i,j,k; cin>>n; for(i=1;i<=n;i++) scanf("%d",原创 2015-03-03 08:24:27 · 1651 阅读 · 0 评论