动态规划
AcerMo
一只辣鸡大学生
展开
-
[Vjudge]龟兔赛跑
题目描述如图经典动态规划题依据题意,我们将起点,终点也看做两个加油站,只不过不需要加油,将输入的站点数据从小到大排列状态定义: f[i]表示从起点到第i个加油站所需的最短时间我们考虑如何转移,不考虑其他情况,从一个站点到另一个站点若时间最短,那么必然是充满电再走的,所以我们令f[i]=min(f[j]+w+t),也就是从它之前的任意一个站点充满电出发,中间不再充电,能得到的最小时间,也许你疑惑为什么中间不需要充电,因为我们定义是在目标站点之前的站点中取最小,而这些站点已经得到了最优值,在前面的站点.原创 2021-11-10 21:11:05 · 857 阅读 · 0 评论 -
[Vjudge]复习时间
题目如图经典的动态规划问题状态定义: f[i][k]表示第i次复习第k门课能获得的最大价值不难发现,题目要求每次复习的课的难度要低于上次,所以我们现将难度从大到小排序,保证状态转移时能够符合题意初始状态: 我们将f[1][k]初始化,表示从第k门课开始复习的最大价值状态转移: f[i][k]=max(f[i][k],f[i-1][j]+w),j<k,w=上次复习第j门课,本次复习第k门课的利益结果: 最终结果即为max(f[m][k]),第m次复习第k门课的价值取最大即为答案代码//.原创 2021-11-10 20:23:47 · 121 阅读 · 0 评论 -
BZOJ1499&&洛谷P2254 [NOI2005]瑰丽华尔兹
大力dpf[e][i][j]表示处理到第e次倾斜,现在位置在i,j的最大格数,如何转移呢?肯定与它的上一次有关,上一次能扩展到的格子,才能继续扩展这个,所以我们枚举这次走了多少步,然后看倒回去的格子有没有被扩展到,然后就大力max就好了for (i->1~n,k->1~m,j->0~ed-st+1) if (f[e-1][i][j]存在) f[e][i+addx*j]...原创 2018-09-07 18:08:26 · 374 阅读 · 0 评论 -
BZOJ1017&&洛谷P4037 [JSOI2008]魔兽地图
%一发hzwer大爷树形背包dp1.处理每个装备的上限--->普通装备总钱数除以单价,特殊装备--->子装备的上限除以需要的数量,最后再和总钱数/单价取min,单价是合成这个特殊装备的价值2.定义f[i][j][k]表示第i件物品,j件用于向上传递,造这件装备一共花费了k时的最大贡献3.对于以 x为根的子树,枚举合成的数量e,然后剩余的钱去买子树单独的装备4.我们定...原创 2018-09-04 16:32:35 · 289 阅读 · 0 评论 -
BZOJ1996&&洛谷P3205 [HNOI2010]合唱队
区间dp我们考虑两个数组f[i][j]和g[i][j]f[i][j]表示构成理想区间i~j,最后一个插进去的是i的方案,g[i][j]表示构成理想区间i~j,最后一个插进去的是j的方案对于f[i][j]1.前一个插进去的是i+1,那么i能插到i+1左边的条件是a[i]<a[i+1]--->f[i+1][j]2.前一个插进去的是j,那么i能插到i+1左边的条件是a[i...原创 2018-08-30 10:25:33 · 207 阅读 · 0 评论 -
BZOJ1037&&洛谷P2592 [ZJOI2008]生日聚会
四重循环大模拟我们考虑f[i][j][k][e]表示前i个人,有j个男生,女生个数即为i-j,任意一段中男生最多比女生多k个,女生比男生最多多e个,那么当前状态可以转移到1.在j<n的情况下,下一个人是男生,即f[i+1][j+1][k+1][e-1],因为e可能是负数,然后我们就不管他了,负数全看成0,然后直接转移过去2.在i-j<m,下一个人是女生,即f[i+1][...原创 2018-08-30 11:00:03 · 234 阅读 · 0 评论 -
BZOJ3598&&洛谷P3286 [SCOI2014]方伯伯的商场之旅
数位DP神题(至少我是这样认为的)说一下抄来的思路我们先假设平衡位置在第一位(最左边),然后算出现在的总代价,然后我们再枚举其他位置时的贡献差自己模拟一下平衡位置右移过程中的变化,假设i是第p位且在现在的平衡点k的右侧,之前的贡献是i*(p-k+1),现在是i*(p-k),差值是一个i所以+i,反之亦然是-i,然后就没了代码//By AcerMo#include<cm...原创 2018-09-07 19:09:54 · 200 阅读 · 0 评论 -
洛谷P1850 换教室
大力dp,先floyd处理每个点之间的最短路,然后大力dp就行了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const in...原创 2018-09-02 19:34:13 · 123 阅读 · 0 评论 -
CF543A Writing Code
大力dpf[i][j][k]表示第i个人,写j行代码,有k个bug,然后发现第一位木有用,所以就缩了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using nam...原创 2018-09-03 16:28:38 · 236 阅读 · 0 评论 -
BZOJ3029守卫者的挑战
概率+背包,刷表dp我们不需要考虑背包是否比碎片多,我们只需要考虑当前比赛有没有赢然后我们就可以定义一个f[i][j][k]表示前i场比赛赢了j场,剩余容量为k的概率,然后直接转移就行了,对于每层循环,分为赢和不赢两种情况,然后因为k可能会变成负值,然后我们就偏移一下就好了代码//By AcerMo#include<cmath> #include<cstdi...原创 2018-09-01 16:26:49 · 254 阅读 · 0 评论 -
BZOJ1860&&洛谷P2593 [ZJOI2006]超级麻将
玄学dp我们不难发现,一个位置的影响只有他前面一位和他后面以为,然后我们就可以枚举一下第i位,i-1位,i-2位分别打出了多少牌,然后,之前的牌里有没有打出过(对),然后暴力转移就行了,因为我们只关心状态是否可以达到,所以用bool数组,|=就好了,不然会TLE代码//By AcerMo#include<cmath>#include<cstdio>#in...原创 2018-09-01 15:03:05 · 296 阅读 · 0 评论 -
BZOJ1709&&洛谷P2476 [SCOI2008]着色方案
记忆化搜索我们定义f[i]表示能涂i个格子的颜色的种树dfs(f1,f2,f3,f4,f5,la)分别表示能涂1,~5个格子的颜色还剩多少种,上一格涂得颜色是能涂la个格子的颜色然后la-1就会多一个,然后我们将这种颜色-1,然后乘法原理,乘上剩下的方案数,看代码上的解释吧代码//By AcerMo#include<cmath>#include<cstd...原创 2018-09-04 09:51:43 · 200 阅读 · 0 评论 -
BZOJ4521&&洛谷P4124 [CQOI2016]手机号码
搜索大法好代码比较清楚就不细讲了,为了避免前导零,我们直接枚举第一位就行了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define lli long long ...原创 2018-08-31 21:45:23 · 287 阅读 · 0 评论 -
BZOJ1218&&洛谷P2280 [HNOI2003]激光炸弹
二维前缀和取个max,然后就没了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int M=5005;int n,...原创 2018-08-31 19:31:33 · 225 阅读 · 0 评论 -
BZOJ1177&&洛谷P3625 [APIO2009]采油区域
二位前缀和+dp我们处理五个数组,s,a,b,c,ds:前缀长度为边长的前缀和a:当前点的左上的范围内的最大正方形b:当前点的右上的范围内的最大正方形c:当前点的左下的范围内的最大正方形b:当前点的右下的范围内的最大正方形然后我们可以把图分成这六种情况然后取max就好了代码//By AcerMo#include<cmath>#inc...原创 2018-08-31 09:40:11 · 305 阅读 · 0 评论 -
BZOJ4576&&洛谷P3147 [USACO16OPEN]262144
定义f[i][j]表示以j为左端点的序列合成i右端点右面一个点的位置,即如果区间[j,x]可以合成i,则f[i][j]=x+1DP转移方程为f[i][j]=f[i-1][f[i-1][j]],然后看i最大到多少就行了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#i...原创 2018-08-19 10:20:33 · 244 阅读 · 0 评论 -
HDU6148 Valley Numer
数位dp我们只需要判断之前是上升下降就行了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int mod=1e9...原创 2018-08-16 10:18:14 · 125 阅读 · 0 评论 -
HDU2089 不要62
挺水的一道数位dp我们只需要考虑上一位是不是6,是六的话当前位就不能填2,然后4直接跳过,记搜一发就好了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using n...原创 2018-08-16 09:15:15 · 212 阅读 · 0 评论 -
BZOJ1799&&洛谷P4127 [AHOI2009]同类分布
数位dp我们需要定义一个全局变量MOD,存储余数,然后在dfs时记录前面数字的和,然后到最后一层后判断是不是整除即模数等于零代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm&g...原创 2018-08-18 11:22:43 · 357 阅读 · 1 评论 -
BZOJ4247挂饰
背包dp我们先按照挂钩数量从大到小排序,然后定义f[i][j]表示前i个挂钩剩余j个挂钩能获得最大快乐值f[i][j]=max(f[i-1][j],f[i-1][j-gua[i]+1]+hap[i])上面式子就是在选与不选之间取个max,后面那里因为会出负数,但是一个挂钩最大贡献也就n所以我们把小于0的部分全堆到0那里就好了代码//By AcerMo#include<...原创 2018-09-10 17:10:56 · 252 阅读 · 0 评论 -
BZOJ3875&&洛谷P4042 [AHOI2014/JSOI2014]骑士游戏
SPFA处理后效性DP有后效性的意思就是会对后面的决策造成影响,很显然,这道题有环,所以我们当前选择可能会影响到当前选择(滑稽 .jpg所以我们可以跑个SPFA,定义f[i]表示打死i需要的最小代价,显然,f[i]=s[i]+所有能生成i的点的f之和,然后若i点更新了,那么能生成的点就会更新,然后去更新就好了代码//By AcerMo#include<cmath>...原创 2018-09-07 11:57:38 · 249 阅读 · 0 评论 -
BZOJ1131&&洛谷 P3478 [POI2008]STA-Station
树形DP思路我们考虑暴力,从每个点dfsdfsdfs,然后累加每个点的depdepdep,然后取maxmaxmax就好如何优化我们不难发现无论哪个点做根,对于他的一个子节点vvv,若将vvv转化为树的根,造成的影响是什么?发现对于v的子树,所有点的dep−1dep-1dep−1,对于vvv子树外的点,dep+1dep+1dep+1,所以我们令f[rt]f[rt]f[rt]表示vvv的父节点...原创 2018-11-02 17:50:43 · 299 阅读 · 0 评论 -
BZOJ1084&&洛谷P2331 [SCOI2005]最大子矩阵
DP+思维思路这道题的切入点是mmm,发现mmm只有两种取值,那么我们就可以尝试对mmm分类讨论m=1发现在m=1m=1m=1时就是在一个一维序列上做k个最大子段和,我们定义f[i][j]f[i][j]f[i][j]表示处理到第iii位,共jjj个矩阵的最大和,咋转移?1.1.1. 假设这一位不选,那就是f[i][j]=f[i−1][j]f[i][j]=f[i-1][j]f[i][j]=...原创 2018-10-24 21:46:57 · 415 阅读 · 2 评论 -
BZOJ1415&&洛谷P4206 [NOI2005]聪聪与可可
期望+BFS+记搜这题很神奇思路可可会跑,所以我们肯定不能每次动态求聪聪要咋走,然后发现总点数很少?我们对每个点BFS一遍,求出dis[x][y]dis[x][y]dis[x][y]也就是图中每两个点之间的路径长,然后根据这个长度,我们可以求出来一个go[x][y]go[x][y]go[x][y]表示当聪聪在xxx,可可在yyy时,聪聪会怎么走,判断就是dis[x][y]=dis[to[i...原创 2018-10-24 11:12:57 · 287 阅读 · 0 评论 -
BZOJ1264&&洛谷P4303 [AHOI2006]基因匹配
树状数组优化DP毒瘤题暴力60分!讲讲思路最暴力的思路就是n2n^2n2求LCS,能拿到60分得好成绩,如何AC?我也不会,这道题中每个元素都出现了5次,这是个很好的性质,也就是说两个序列的元素是一样的所以我们不妨存下第一个串中每个元素都在哪个地方出现过,那么我们在用第二个串匹配时,直接找到当前元素在a串中出现的位置,因为只有在这些位置才可能有贡献,然后我们用树状数组维护一下每个位置上的L...原创 2018-10-23 20:56:08 · 258 阅读 · 0 评论 -
BZOJ3594&&洛谷P3287 [SCOI2014]方伯伯的玉米田
二维树状数组优化DP手动再见大毒瘤这样的出题人就是丧病n2n^2n2只有10分!!!讲一下思路不难发现,每次拔高,必定是从序列中某个地方直接拔高到序列末尾,为啥?我们假设没有拔到末尾,那么有以下几种情况1.拔高区间有一些比左侧低的,现在不低于左侧了2.拔高区间有一些比左侧高的,现在还是高于左侧3.拔高区间有一些不高于右侧的,现在高于右侧了也就是说拔高某一段,会造成1.在它左...原创 2018-10-23 19:50:31 · 302 阅读 · 1 评论 -
BZOJ1260&&洛谷P4170[CQOI2007]涂色
区间DP思路我们定义f[i][k]f[i][k]f[i][k]表示从i涂到k,使得和原序列相同的最少步骤,显然f[i][i]=1f[i][i]=1f[i][i]=1,因为这是最暴力的涂法QWQ,然后如何转移?考虑两个端点i,k,若s[i]=s[k]s[i]=s[k]s[i]=s[k],那么显然我们可以在涂这两个端点中间之前,先把i到k涂一遍,再涂中间,所以f[i][k]=min(f[i+1][...原创 2018-10-18 21:17:19 · 318 阅读 · 0 评论 -
洛谷P2704 [NOI2001]炮兵阵地
裸状压正常状压只需要枚举上一行即可,但是这道题我们需要枚举上两行,这样才能保证不冲突,合法的状态时i&(i<<1)=0,i&(i<<2)=0,我们只需要考虑它和他左边不冲突就好了,右边会有下一个位置保证和他不冲突,于是这道题就没了,需要滚动一下数组代码//By AcerMo#include<cmath>#include<cstdi...原创 2018-09-21 19:41:57 · 204 阅读 · 0 评论 -
POJ3254&&洛谷P1879 [USACO06NOV]玉米田Corn Fields
状压DP入门题我写的第一道状压DP状压就是把某种状态,用某种进制的数字串表示出来,比如说一行格子,奇数格子有 障碍物,偶数没有,我们就可以表示成1010101,这大概就是状压的主要思想对于这些数字串,我们叫做可行状态,需要预处理出来,然后我们发现,预处理所有状态,可以用dfs搜一遍,就可以很快的得到所有可行状态对于这道题,可行状态就是在二进制表示中两个1不挨着,如何知道二进制表示不挨着?将...原创 2018-09-21 19:08:44 · 320 阅读 · 0 评论 -
BZOJ2431&&洛谷P2513[HAOI2009]逆序对数列
while (1) puts(“DP神题”)初始思路发现按顺序加数的话,这个数只会对其他人产生影响,并不会有大于他的数出现,最多可以出现min(i-1,m)个逆序对,所以一个显然的递推式f[i][k]=∑j=0min(k,i−1)f[i−1][k−j]f[i][k]=\sum\limits_{j=0}^{min(k,i-1)}f[i-1][k-j]f[i][k]=j=0∑min(k,i−1)...原创 2018-10-11 20:34:32 · 261 阅读 · 0 评论 -
洛谷P2113 看球泡妹子
DP神题思路清奇我直接不管妹子,骗了90分,(滑稽思路我们定义f[i][j][k]f[i][j][k]f[i][j][k]表示选到了i场比赛,第i场比赛要看第j场比赛 ,妹子的满意度是k时,他能得到的最大满意度,然后跑个类似背包的东西就好了,出题人真是丧病良心啊代码//By AcerMo#include&lt;cmath&gt;#include&lt;cstdio&gt;#inc...原创 2018-10-11 19:20:04 · 271 阅读 · 0 评论 -
洛谷P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀
DP大法好dp思路定义f[i][j][1/2/3]f[i][j][1/2/3]f[i][j][1/2/3]表示dp到第i位,变了j次,当前是石头/剪刀/布的最大胜出局数,转移的话就在max(f[i−1][j][k],f[i−1][j−1][e!=k])max (f[i-1][j][k] , f[i-1][j-1][e!=k])max(f[i−1][j][k],f[i−1][j−1][e!=k...原创 2018-10-11 15:03:50 · 203 阅读 · 0 评论 -
洛谷P1831 杠杆数
数位DP区间求符合条件的数的个数,不出意外应该是记搜大法好了2333我们枚举平衡点,然后最后判断两侧数是否相等就行了我们定义dfs(int p,int w,int s,bool j,bool z)分别表示第p位,平衡点在第w位,当前和为s,是否有数位限制,是否有前导零然后我们就可以大力搜索了,s的更新是s+(p-w)*i发现平衡点两侧的p-w符号不同,然后剪枝,当s<0时,retu...原创 2018-10-02 19:15:31 · 369 阅读 · 0 评论 -
洛谷P2679 [NOIP2015]子串
毒瘤dp思维量巨大,于是我抄了题解我们先写一个假的dp转移方程:f[i][j][k]表示a串到第i位,b串到第j位,一共用了a中的k个子串的方案数, 咋转移?考虑当前考虑的a的这位是单独成一个串还是与前面的连在一起于是乎就有了f[i][j][k]=f[i-1][j-1][k]+f[i-1][j-1][k-1],前提条件是a[i]=b[j],但如果不相等呢?那这个方程就出锅了,所以我们新...原创 2018-09-13 18:54:11 · 463 阅读 · 1 评论 -
BZOJ5196&&洛谷P4267 [USACO18FEB]Taming the Herd
n^4大力DP我们定义f[i][j]表示前i天跑了j次然后我们枚举第j次是在哪天跑的,然后大力转移就好了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using name...原创 2018-09-18 20:03:27 · 352 阅读 · 0 评论 -
BZOJ1426&&洛谷P4550 收集邮票
概率仙题定义f[i]表示当前取到第i张邮票,取完剩下的邮票的期望次数,g[i]表示当前取到第i张邮票,取完剩下的邮票的期望总价f[n]=g[n]=0先看f[i]假如我们当前取到了第i张邮票, 那么下一次有inin\frac{i}{n}的概率取到和这i张邮票相同的邮票,期望是in∗f[i]in∗f[i]\frac{i}{n}*f[i], 下一次取到不同邮票的概率是n−...原创 2018-09-13 16:02:31 · 209 阅读 · 0 评论 -
BZOJ1055&&洛谷P4290 [HAOI2008]玩具取名
记忆化搜索(正解是区间dp)我们定义dfs(l,r,k)表示区间l~r能不能用第k种字符展开,然后爆搜就好了,用了一个字符-->数字的映射代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<a...原创 2018-09-13 14:40:37 · 217 阅读 · 0 评论 -
纪中OJ 5178 【NOIP2017提高组模拟6.28】So many prefix?
KMP+前缀和考场上没想到,打了一个AC自动机,水到了27.3分(十一组数据)然后我们来看正解首先显然的是从第一位开始,每个偶数位对应的前缀一定是一个答案,那我们记f[i]=1(i%2==0)然后我们考虑KMP的过程,后面串匹配前缀,所以如果他能匹配到一个偶数,也就是说nxt[j]=i(i%2==0),那么我们就可以发现这个字符串对应的肯定是一个长度为偶数的前缀,那么直接累加就好了...原创 2018-08-12 12:46:29 · 461 阅读 · 0 评论 -
POJ3252Round Numbers
一道数(sou)位(suo)d(da)p(fa)我们定义dfs(int p,int sub,bool jud,bool zero)p是从高到低枚举的位数,sub是到当前为止,0的个数与1的个数的差,jud是判断当前这位是否可以肆无忌惮的填数,也就是之前某位是不是已经比R的对应位小了,然后是zero,判断之前的位中,是否已经有了1然后就是搜索大法好了代码//By AcerMo ...原创 2018-08-14 19:43:31 · 189 阅读 · 0 评论 -
BZOJ4300&&洛谷P4310 绝世好题
一道还算简单的dpn^2的想法是对于每个num[i]遍历每个数使 a&b=1这里ab是对应2进制位但是因为要求是序列,所以是不能跳的,所以我们对于num[i]的每一位,遍历上一次他出现的位置就行了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#inclu...原创 2018-08-02 15:26:49 · 218 阅读 · 0 评论