
动态规划
xyc1719
努力会说谎,但努力不会是白费
展开
-
NOIP第二轮模拟 Day2 物流运输
【问题描述】物流公司要把一批货物从码头A运到码头B。由于货物量比较大,需要n天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。但是修改路线是—件十分麻烦的事情,会带来额外的成本。因此物流公司希望能够订一个n天的运输计...原创 2018-07-08 15:04:15 · 352 阅读 · 0 评论 -
windy数 数位DP
【一句话题意】定义相邻两个数位之差都大于2的数为windy,问[a,b]中windy数有多少。a,b<=2e9【分析】鉴于a,b的值并不是太大(int都存的下),所以就产生了玄学打表的方法,按每1e6个数打一次表记录到x为止有一个windy数。边界部分就直接暴力枚举2e6个数。不服不行啊当然数位dp可以比它复杂度上更优,也跟更能处理复杂的情况。定义f[i,j]表示i位数,最高位为j的方...原创 2018-11-01 21:11:46 · 311 阅读 · 0 评论 -
量子二叉堆 动态规划+乱搞求逆元
【一句话题意】最后希望你给出n个互不相同的数能构成多少个不同的大小为n的二叉堆(大根堆或小根堆都算二叉堆,不同定义为至少有一个位置上数不同)。n<=5e6【分析】对于二叉堆,顶端最小(或最大)是确定的,剩余元素的分配其实是随意的。将剩余的元素随意分配到左右两棵子树,离散化之后就变成了之前的一个已求得的子问题。可以得到一个(伪)状态转移方程f[x]=f[x左子树节点数]∗f[x右子树节点...原创 2018-11-04 14:30:54 · 202 阅读 · 0 评论 -
密码 passwd.cpp
【一句话题意】给你一个长度不超过17 的由0…9 组成的无前导0 的字符串S,求S 中的数字排列组成的无前导零的能被17 整除的整数中字典序第K 小的那个数。k<=17!【分析】s有17位显然是数位dp,求排列第k大显然是计数dp。状态定义由于是求排列,所以不能像普通数位dp一样,定义为f[state][k]表示选择数之后状态为state对17取模为k时的方案总数。f[0,0]=1。...原创 2018-11-02 15:42:47 · 260 阅读 · 0 评论 -
大联欢 party.cpp
【一句话】有n 个点m条无向边,问是否能使n个点划分到两个集合中使得每个集合都是一个完全图。如果不可以输出-1,如果可以则输出两个集合最小的边数总和。【分析】可以说是图论的经典一题。正方向建图似乎很难考虑,那我们考虑建反图(有边的没边,没边的有边)。反图中每条边表示的意义就是,两个点不能在同一个集合(如果在同一个集合,则集合一定不是完全图)。再者进行二分图染色,如果我不存在矛盾的情况,就一定会...原创 2018-11-02 15:25:18 · 148 阅读 · 0 评论 -
势利的小卖部
【简要题面】有n个商品,实际价格为ai,价值是ci,需要口袋中钱≥bi时才可以购买。现在你有m元,求可以购买到的最大价值。n&lt;=500,m&lt;=5000【分析】第一眼看上去像是背包,果然不是。。。。仔细分析发现应该需要dp,因为一样商品能否购买只与当前剩余的m值和bi值有关。问题在于哪些商品先买,哪些商品后买。简而言之,就是求拓扑序,直接证明一下就可以了。证明过程从简:1、假设两...原创 2019-02-15 13:38:28 · 268 阅读 · 0 评论 -
机智的csy
【简要题面】现在你在数轴上的坐标为x,你需要到坐标y。现在有两种操作:1.先前或向后一步2.坐标*2现在求最小的操作数。数轴长度<=1e5。【分析】数轴不长所以可以随便乱搞,dp,bfs或者像我乱spfa都可以。【code】#include<cstdio>#include<cstring>#include<iostream>#incl...原创 2019-02-15 14:24:15 · 216 阅读 · 0 评论 -
题解
【简要题意】现在有n道题,每天有m元收入。完成这道题当天需要ai元钱,并在第二天支付bi元钱。当天的钱不能储存。所有问题必须顺序解决,但同一天内可以做多个问题。求做完所有题目并支付完所有款项的最少月数。注意第一天开始打工所以没有收入。n<=300,m<=1000.【分析】这道题非常简单,问题在于有的人会陷入贪心的怪圈。这里我们看一组hack数据100 3100 6010 70...原创 2019-02-16 15:33:03 · 165 阅读 · 1 评论 -
调换纸牌
【简要题意】将n个纸牌移动到任意位置后可以形成升序的序列。求最小的n。Len<=5e5。【分析】求最长不降子序列(LIS)。用f[i]记目前为止,长度为i的序列最小为多少再用二分查找。总复杂度为Θ(nlog2n)\Theta(nlog_2n)Θ(nlog2n)【code】#include<cstdio>#include<cstring>#include&...原创 2019-02-18 13:40:50 · 198 阅读 · 0 评论 -
【CF977F】sequence 序列
【简要题面】给定一个含n个正整数的序列。选取任意个不重复的子序列,将其按顺序拼接起来,保证有a[i+1]=a[i]+1。求最长子序列,含有spj,n<=2e5【分析】一个结论,同样的一个数字:比如说是3,后面的3一定不比前面的3差。所以直接用map记录每个数字最后出现的位置,然后dp值从上一个位置转移过来就可以了。【code】#include<map>#include&...原创 2019-02-14 15:09:42 · 209 阅读 · 0 评论 -
【CF791D】tree 柠檬树
【题目描述】Herobrine能掌控所有,除了他内心的那棵柠檬树。他每看到一件让自己心生羡慕的事,他内心的柠檬树上就会多长出一只多汁美味的柠檬。现在,Herobrine有一棵含有n只柠檬的柠檬树,编号从1到n。这n只柠檬由n-1条树枝相连。 柠檬之间很喜欢用脱落酸进行交流。脱落酸只能通过树枝传递。柠檬们为了尽量频繁的进行交流,就团结一心,调整了树枝的形态,使得任意两只不同的柠檬之间都有且仅有...原创 2019-02-14 15:48:22 · 254 阅读 · 0 评论 -
Poj1737 Connected Graph 计数dp、组合数、高精度
又是一道令人胆寒的组合数。。。。【一句话题意】求n个结点的无向图的个数。(每个节点有标号)n<=50【分析】对于dp来说,状态的划分和转移是十分重要的。一个连通图是难以进行状态划分的,但一个不连通的无向图是则很容易划分成结点更少的两个部分。所以我们考虑从所有的无向图中减去所有的不连通图,就是所有连通图的数量。一个无向联通图中至多有n∗(n−1)/2n*(n-1)/2n∗(n−1)/2条...原创 2018-10-27 22:21:27 · 253 阅读 · 0 评论 -
规避(Evade)
【一句话题意】给你一个图源点s和汇点t,先求得最短路,再在最短路上,求在s和t同时出发,不相遇不重复的路径方案数。对1e9+7取模。【分析】考虑容斥原理,不考虑相遇,则方案数为{最短路条数}2。再排除在边上相遇的情况{f[u]*g[v]}2和在点上相遇的情况{f[u]*g[u]}2。f、g数组为从s(或t)走最短路出发到点i的方案数。细节上处理的关键在于从整张图中抽离出最短路再进行dp。【...原创 2018-10-25 20:43:41 · 208 阅读 · 0 评论 -
【NOIP2015】Day1 斗地主
这里是洛谷的传送门【分析】 强烈建议做一下luoguP2540斗地主增强版,人不能只满足于随机数据,因为出题人往往都会出一些神奇数据来满足你被卡的愿望。这里讲一下我看见的某位大神的思路:先用f[i][j][k][l]表示当有i个炸弹,有j个三,有k个对子,有l个单牌时最少的出牌数(不考虑顺子),用动归求出每个数值,留作后用。(其实就是预处理,逃)。然后dfs顺子(单顺子、双顺子、三顺...转载 2018-07-24 19:28:29 · 178 阅读 · 0 评论 -
track
____________________________________________________ dp大法好啊,然而我打错了。。。 还是先抽象题目,我们可以神奇看成是Jerry的跑动方式构成一个字符串(任意前缀D不可以大于U,且整个字符串最终D和U个数相同),如果有一个满足Tom的子序列则判断为合法,求合法序列。、貌似有点太抽象了,各位大概感觉一下就可以了。。。原版...原创 2018-08-14 16:56:02 · 234 阅读 · 0 评论 -
CodeForces 17C 平衡字符串(Balance)
CF17C 扎心的题面,考试的时候题面是”相邻字符串”花了两个小时死活没想出,回头看了cf发现tm竟然是“相邻字符”!(雾)如果cf的题面是正确的,那么这道题就可以轻易地用四维dp完成。定义初始字符串为A,操作后为B,将两者去重(删除相邻的同一种元素)形成子串a和b。手推可得b一定是a的子串(虽然不一定是真子串)。如上我们可以构造一个长度为n的字符串,要求a、b、c字符个数之差均不超过1...原创 2018-08-17 19:31:28 · 991 阅读 · 0 评论 -
grass 剪草
【题目描述】 有N棵小草,编号0至N-1。奶牛Bessie不喜欢小草,所以Bessie要用剪刀剪草,目标是使得这N棵小草的高度总和不超过H。在第0时刻,第i棵小草的高度是h[i],接下来的每个整数时刻,会发生如下三个步骤: (1)每棵小草都长高了,第i棵小草长高的高度是grow[i]。 (2)Bessie选择其中有一棵小草并把它剪平,这棵小草高度变为0。注意:这棵小草并没有死掉,它下一...原创 2018-09-09 16:50:54 · 324 阅读 · 0 评论 -
国庆七连测(一)divide
【一句话题意】有T组数据(T≤5,000),每组有六个数,分别表示价值从1到6的物品的个数。(总价值≤20,000)问等否将物品按价值平分。【分析】明显是背包求f[sum/2]是否等于1。然后我们针对多重背包一顿乱搞。结果差了0.0x s的死在了最大数据面前。(友情提醒:单调队列优化的常数较大,在小数据时优势不一定相较于二进制优化明显。对多重背包有疑问的可以查看我的博客coins)好了关...原创 2018-10-01 15:38:32 · 198 阅读 · 0 评论 -
国庆七连测(一)cmi
【一句话题意】求长度为n的序列,排序的最少元素移动次数。【分析】转化一下题意,由于n一定,我们转而求最大的不移动元素个数。于是就是lcs啊就是lcs啊就是lcs啊就是lcs啊┓( ´∀` )┏ 裸题啊。。。。Code:#include<cstdio>#include<cstring>#include<iostream>#includ...原创 2018-10-01 15:45:58 · 193 阅读 · 0 评论 -
国庆七天测(五)祭司
【题意】给定n个数的取值范围,把他们分为a,b两组。找到一种恰当的分组使得,两个集合的差值的绝对值的最大值最小。n,li,ri&amp;lt;=200【分析】首先一个显而易见的规律是,差值最大值一定是一个集合最大值减去另一个集合的最小值。这样我们可以在确定集合时O(1)出解。然后二进制枚举加玄学猴子排序就可以ac了,然而并不是正解。考虑一种dp,定义f[i][j]为A集合中下界为i上界为j能否达到。设...原创 2018-10-05 15:33:52 · 147 阅读 · 0 评论 -
国庆七连测(六)计数
给出一个数n,根据该数建图,从每个点到该点的倍数(包括自己和0)连一条单向边 然后给出三个数,q1,q2,q3,求出 1.从1到q1所有长度为2的点 2.从1到0中长度小于q2的路径个数 3.从1到0中长度小于q3且不经过重复点的路径个数 4.3中所有路径上的编号和的和 这道题看上去是道数论题,实际上是dp题对于第一问,我们可以发现,从1可以到任何数,而到q1的只能是q1的因数,...原创 2018-10-06 16:11:28 · 137 阅读 · 0 评论 -
A decorative fence 计数
【一句话题意】给n块长度为1~n的木板,组成一个长度为n的序列,满足相邻的木板都比自己长或短。方案按字典序排列。有多组询问,问当有ai块木板时,第bi号方案是什么。ai<=20,bi<=263【分析】类似于倍增dp的“拼凑”思想和手推康托展开时的方式,我们可以用“试填”的方式来确定第bi号方案中各个木板的长度。比如从小到大枚举,如果当第一块木板长为h时,N-1块木板的构成的方案数T...原创 2018-10-28 18:49:33 · 228 阅读 · 0 评论 -
poj3208 启示录 数位dp
【一句话题意】定义十进制下有3个连续的6的数为魔鬼数。有T个询问,求第k小的魔鬼数。T<=1000,k<=5e7【分析】由于K有5e7那么大,哪怕线性dp,常数稍大就会有TLE的风险。如果内存小于128MB又会有MLE的问题显然,预处理出第k大的魔鬼数是不可靠的。由于T较小,我们转而考虑能否像计数dp一样将先大致预处理出辅助数组,再进行“拼凑”。回答是可行的。但dp数组的定义是与...原创 2018-10-28 20:17:08 · 819 阅读 · 0 评论 -
麻将 hongmah
题目来源:CF1110D【简要题意】有n个数集合(多重集),每个数不超过m。可以分成{i,i,i}或{i-1,i,i+1}的三元组,求最多分成几份三元组。n、m<=1e6【分析】考虑动态规划,写出一个Θ(n3)\Theta(n^3)Θ(n3)的动归方程,放下转贪心。试了好几种贪心策略都被hack,并且对于贪心证明毫无头绪。回到dp,结果是一种对于状态定义的优化:定义f[i][j][k...原创 2019-03-10 19:49:21 · 173 阅读 · 0 评论