
dp
Exception2017
OI总结
展开
-
牛牛的回文串 区间dp 最短路
原题:https://ac.nowcoder.com/acm/problem/21337题意:给一个S字符串,通过三种操作(添加,删除,修改)变成回文串的的最小代价。考虑区间dp[i][j]dp[i][j]dp[i][j]表示i~j是回文串的最下代价S[i]=S[j]S[i]=S[j]S[i]=S[j] ,dp[i][j]=dp[i+1][j−1]dp[i][j]=dp[i+1][j-1]dp[i][j]=dp[i+1][j−1]考虑去掉端点i的影响可以删去i或在另一端加上i,记cost[i]cos原创 2021-05-28 21:38:49 · 245 阅读 · 1 评论 -
icpc2020上海C Sum of Log 数位dp
题意求∑i=0x∑j=[i=0]y[i&j=0]⌊log2(i+j)+1⌋\sum_{i=0}^{x}\sum_{j=[i=0]}^{y} [i\& j=0]\lfloor log_2(i+j)+1 \rfloori=0∑xj=[i=0]∑y[i&j=0]⌊log2(i+j)+1⌋题解:很容易想到枚举i+j的位数,然后求再范围内的[i&j][i\&j][i&j]的(i,j)对。考虑用数位dp。记f[k][l1][l2]f[k][l1][l2]f[k][原创 2021-04-26 21:28:28 · 155 阅读 · 0 评论 -
2020icpc上海E The Journey of Geor Autumn dp
题意:数列满足对于i>ki>ki>k 存在ai−ka_{i-k}ai−k到ai−1a_{i-1}ai−1的最小值mmm满足aia_iai>mmm。题解:对于1-n的数列最小值必须放在1-k,记为j,对于1-j-1可以随便放,对于j+1-n则是一个子问题。记f[n]f[n]f[n]为1-n的方案数。当i<=ki<=ki<=k时:f[i]=i!f[i]=i!f[i]=i!当i>ki>ki>k时f[i]=∑j=1kAi−1j−1f[i−j原创 2021-04-25 21:11:49 · 136 阅读 · 0 评论 -
NC 环路运输
原题:https://ac.nowcoder.com/acm/contest/1045/B题意:给n个元素围成一个环 求max{Ai+Aj+dis(i,j)}max\left\{ A_i+A_j+dis(i,j)\right\}max{Ai+Aj+dis(i,j)},dis(i,j)=min(∣i−j∣,∣n−i−j∣)dis(i,j)=min(|i-j|,|n-i-j|)dis(i,j)=min(∣i−j∣,∣n−i−j∣)题解:将环拆成链,求max{Ai−i+Aj+j}max\left\{A_i原创 2021-04-22 21:47:41 · 114 阅读 · 0 评论 -
NOIP2017 逛公园 最短路 dp
原题:https://ac.nowcoder.com/acm/problem/16416题意:设d为1-n的最短路,求从1-n长度为[d,d+k]的路径的个数。若为无穷种,则输出-1。题解:不妨先考虑无穷的情况,若最短路中存在0环,就有无穷种。令dis[u]表示u-n的最短路,f[u][i]f[u][i]f[u][i]表示u->n长度比dis[u]dis[u]dis[u]大i的路径个数。考虑u通过v再到n,则多花费的路程为t=w[u][v]+dis[v]−dis[u]t=w[u][v]+dis[v原创 2021-04-21 22:03:05 · 151 阅读 · 0 评论 -
CF1499D The Number of Pairs 数论
题意:求有多少(a,b) 使得c∗lcm(a,b)−d∗gcd(a,b)=xc*lcm(a,b)-d*gcd(a,b)=xc∗lcm(a,b)−d∗gcd(a,b)=x题解:令i=gcd(a,b)i=gcd(a,b)i=gcd(a,b),A=a/iA=a/iA=a/i, B=b/iB=b/iB=b/i,原式等于cABi−di=xcABi-di=xcABi−di=x,i(cAB−d)=xi(cAB-d)=xi(cAB−d)=x,若x能整除i,则cAB=xi+dcAB=\frac{x}{i}+dcAB=ix原创 2021-04-03 20:28:02 · 173 阅读 · 0 评论 -
CF914C Travelling Salesman and Special Numbers 数位dp
原题; http://codeforces.com/problemset/problem/914/C题意;x进行变换就会变成2进制中1的个数,对于给的N求1-N的变换k次变成1的个数。题解:虽然N很大,但是进行一次变换就会变成1000以内的数,不妨暴力预处理出1-1000的变成1的次数。之后考虑数位dp即如何填1。先考虑为1的数位可以填可以填0可以填1,填0的话后面就是一个组合数,直接就能算出来,填1的可以在之后的1算出来考虑为0的数位,假如可以填1,但这一部分被组合算完了,直接跳过就行。#i原创 2021-01-23 21:14:57 · 169 阅读 · 0 评论 -
牛客小白月赛30J 小游戏 dp
https://ac.nowcoder.com/acm/contest/9667/J题意:有一个长度为 n 的数组 a[i] , 每一步能拿走一个数,比如拿第 i 个数, a[i] = x ,得到相应的分数 x ,但拿掉这个 x 后, x+1 和 x-1 (如果有 a[j] = x+1 或 a[j] = x-1 存在) 就会变得不可拿(但是有 a[j] = x 的话可以继续拿这个 x )。求最大分数。题解:显然我们只用关注数值,不妨把数值相同的加在一起。然后令f[n]为1-n不能选相邻的最大值。简单的原创 2021-01-21 18:55:23 · 111 阅读 · 0 评论 -
牛客15553 数学考试 dp
链接:https://ac.nowcoder.com/acm/problem/15553来源:牛客网今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完,他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间,即[L,L+1,L+2,…,L+k-1],[R,R+1,R+2,…,R+k-1](R >= L+k)。题解令f(i)为1−i的长度为k的最大值,枚举第二个区间,做个简单的dp就行了令f(原创 2021-01-16 21:30:03 · 158 阅读 · 0 评论 -
NC 21336 和与或(数位dp)
题意:给R[i],求保证0≤A[i]≤R[i], 给R[i],求保证0\leq A[i]\leq R[i],给R[i],求保证0≤A[i]≤R[i],A[0]+A[1]+A[2]+....+A[n−1]=A[0]∣A[1]∣...∣A[n−1]的方案数 A[0]+A[1]+A[2]+....+A[n-1]=A[0]|A[1]|...|A[n-1] 的方案数A[0]+A[1]+A[2]+....+A[n−1]=A[0]∣A[1]∣...∣A[n−1]的方案数因为:a+b=aANDb+aORb a+b=a原创 2020-11-16 22:07:54 · 130 阅读 · 0 评论 -
NC 21314 codeforces dp
题目:https://ac.nowcoder.com/acm/problem/21314题目大意:比赛时间为T分钟,有N道题,第i道题的初始分数为maxPoint[i],每分钟减少pointsPerMinute[i],第i道题的时间为requiredTime[i]。求最大的分数。分析:由于分数可能为负,所以对于一些题,可能不写的分数更高。 考虑如果不递减,那么就是一个普通的0/1背包 考虑每道题的先后顺序,假设i优于j,那么先做i,永远比j的得分高。考虑排序,最优先的先做。 Score1原创 2020-11-06 00:05:28 · 123 阅读 · 0 评论 -
[TJOI2017]城市 树形dp+树的直径+树的中心
原题:https://www.luogu.org/problemnew/show/P3761题解:修改一条边,使最长链最短。枚举每一条边,显然可以将树分成两个联通块,那么最长链可以是两个联通块的直径,也可以是,连接两个联通块的中心,即两颗树的半径+枚举的边长。可以用树形dp求。对于直径:设dp[x][0/1]表示以x为根子树的最大长,和次大长void getd(int x,int ...原创 2019-04-30 23:54:37 · 273 阅读 · 0 评论 -
CF145C Lucky Subsequence 组合+dp
原题:http://codeforces.com/problemset/problem/145/C题解:全部是4,7的数字被称为lucky数字,要求不出现重复lucky数字长度为k的集合个数,注:每个相同的lucky数字是不一样的。很容易发现若我们已经确定选i个lucky数字时剩下的数字可以随便选了.设f(n)表示选n个不一样的lucky数字的方案数那么答案就是:。(num为lucky...原创 2019-04-27 22:19:36 · 186 阅读 · 0 评论 -
CF958B2. Maximum Control (medium) 树形dp/树的直径+贪心
原题:http://codeforces.com/contest/958/problem/B2题解:这题本质上是一个dp。通过分析可以发现当只放1个时答案为1,只放两个时为树的直径,现在考虑放三个的时候,应该在剩下的树上找一条较长的链。可以得到一个策略:只要给一颗树,这个选择的顺序就是确定的,就是找树上不重叠链的长度的降序排序。这个结论为什么是正确的,给出一种很fake的证明:用数学归纳法...原创 2019-04-27 21:55:42 · 420 阅读 · 0 评论 -
[ZJOI2007]时态同步 树规
原题:https://www.luogu.org/problemnew/show/P1131题解:用dp的方法做,设s[x]为以x为根的最长路径,f[x]为以x为根的需要的结果。有dp方程:(y为x的儿子)s[x]=max{ s[y]+w[x][y]}f[x]=sum{f[y]+s[x]-s[y]-w[x][y]}要注意的是x需要遍历完所有的儿子在求和。这题要开long long...原创 2019-04-09 23:14:49 · 141 阅读 · 0 评论 -
[SCOI2008]奖励关 状压dp+期望
原题:https://www.luogu.org/problemnew/show/P2473题解:很容易想到一个方程,f[i][S],第i轮 选S的期望值,转移应该是第i-1轮能转移的和的平均值,不过不好判断转移的条件,所以我们考虑倒序枚举。即f[i][S]表示 1-i-1轮S状态,i-k的期望值。这样就能用&运算来判断。即当能转移时 即a[j]&S ==a[j] S中包含...原创 2019-04-10 23:44:28 · 156 阅读 · 0 评论 -
AT2000 Leftmost Ball dp+组合数学
原题:https://www.luogu.org/problemnew/show/AT2000题解:其实就是方n个白球和k-1个其他n种颜色的求的方案数,可以发现不需要关注每个球的位置,考虑转化f[i][j]表示放了i个白球,j种颜色的球(i>=j) 考虑左边数第一个空位放什么,放白球时f[i][j]+=f[i-1][j],放其他颜色时应该从放f[i][j-1]共有n-(j-1)个颜色其...原创 2019-04-06 21:52:50 · 152 阅读 · 0 评论 -
换教室(期望dp)
题目描述对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。在可以选择的课程中,有 2n2n2n 节课程安排在 nnn 个时间段上。在第 iii(1≤i≤n1 \leq i \leq n1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 cic_ici 上课,而另一节课程在教室 did_idi 进行。在不提交任何申请的...原创 2018-11-10 21:42:21 · 166 阅读 · 0 评论 -
noip2018 货币系统
题目:https://www.luogu.org/problemnew/show/P50202 4 3 9 10 6 5 11 29 13 19 17 题解:观察 样例 显然 3可以把6代替,这样就转换成如果这个数可以被比他小的数凑出来这个数的就会被替代。我们考虑排序然后求完全背包。#include<cstdio>#include<cstring>...原创 2018-11-24 20:13:27 · 889 阅读 · 0 评论 -
CF432D Prefixes and Suffixes kmp+dp
原题:http://codeforces.com/contest/432/problem/D题解:求所有前后缀相同的子串的个数。kmp中的nxt数组就是前后缀相等的最大长度,只要将j=nxt[nxt[i]]做到刚好大于0就行了。考虑dp有:f[i]表示1-i的字符串出现的个数,f[nxt[i]]+=f[i],所有应该从后往前扫描统计答案。#include<cstdio>#i...原创 2019-02-14 21:12:13 · 259 阅读 · 0 评论 -
bzoj1511 kmp+dp
原题:https://www.lydsy.com/JudgeOnline/problem.php?id=1511题解:求最长周期的和。通过分析很容易得出,最长周期应该是长度-最短前后缀相等的长度。我们知道 nxt为最长前缀,而要求最短前缀可以用dp来解决。最长前缀为 i-f(i)#include<cstdio>#include<cstring>#inc...原创 2019-02-07 20:58:09 · 192 阅读 · 0 评论 -
[TJOI2018]教科书般的亵渎 组合数学+递推
原题:https://www.luogu.org/problemnew/show/P4593题解:让你们见识一下教科书般的亵渎。玩过炉石传说的都知道,当连续一段的ai中少一个时就要再放一张亵渎。所以亵渎的张数是m+1。答案就是。这里可以用递推的方法。设 有 ; 累加得 ,整理得 ,计算答案是模拟就行了。推清楚亵渎的过程。#in...原创 2019-03-08 22:02:48 · 239 阅读 · 0 评论 -
P1578 奶牛浴场 悬线法+dp
原题:https://www.luogu.org/problemnew/show/P1578题解:给一些障碍物,求最大矩形的面积,不能覆盖障碍物。悬线概念:有效竖线:除了两个端点外,不覆盖任何障碍点的竖直线段。 悬线:上端点覆盖了一个障碍点或达到整个矩形上端的有效竖线。每个悬线都与它底部的点一 一对应。每个悬线可以向左右扩展就会得到一个矩形。最大矩形一定在这些矩形中。设:h[i]...原创 2019-03-09 22:50:27 · 287 阅读 · 0 评论 -
[AHOI2009]中国象棋 dp+递推
原题:https://www.luogu.org/problemnew/show/P2051题解:求在n*m中放炮的方案数,每行每列最多2个。考虑50分的做法,将每一列的状态压缩,用3进制表示。即f(i,j)表示前i行,状态为j的方案数。讨论当前行放的棋子数。<1> 当这一行不放时,f(i,j)=f(i-1,j)<2> 放1个时: f(...原创 2019-03-10 22:20:08 · 146 阅读 · 0 评论 -
[ZJOI2007]棋盘制作 单调栈||dp
原题:https://www.luogu.org/problemnew/show/P1169题解:求最大的01正方形和矩形。若只求01中最大矩形可以用单调栈一列一列做,设f(i,j)为第i行第j列最长连续的0的长度。用单调栈维护最大矩形面积就行了。但本题要求01交替的矩形面积。我们考虑做两遍,将相邻斜线的0全改成11 0 1 1 1 1 { 1 2 30 1 0...原创 2019-03-09 18:58:45 · 139 阅读 · 0 评论 -
CF55D||noi.ac模拟赛第二场 数位dp
原题:http://codeforces.com/problemset/problem/55/D题解:题意给一个区间[l,r],求区间中可以被所有非0数位整除的数的个数。显然可以把区间拆开,[1,l-1]和[1,r]。问题就转化成求1-n的个数。可以发现1-9的最大公约数为2520。考虑如何转化,如果一个数a可以被所有非0数位整除,那他一定可以被2520的一个因整除。这个性质很容易证明任意一个...原创 2019-03-21 22:55:25 · 225 阅读 · 0 评论 -
AT2699 Flip and Rectangles 悬线dp
原题:https://www.luogu.org/problemnew/show/AT2699题解:直接看没什么思路,考虑将问题化简,若为2*2的矩阵,则要偶数个1就能翻。考虑将两个2*2合并例如:1 0 1 => 1 1 1= > 1 10 1 0 1 1 1发现了这样的规律,相邻的2*2的矩阵若满足情况就可以翻。不妨将2*2打上标记,由2*2组成的...原创 2019-03-22 20:15:19 · 266 阅读 · 0 评论 -
AT2037 高橋君とカード / Tak and Cards 背包dp
原题:https://www.luogu.org/problemnew/show/AT2037题解:求子集中平均数位m的个数。有sum(a[i])/num=m,即sum(a[i])=m*num,那么设f[i][j][k]表示前i个,选k个和为j的方案数。其实就是个背包。转移为:。#include<bits/stdc++.h>#define ll long long usi...原创 2019-03-22 22:16:35 · 126 阅读 · 0 评论 -
[SCOI2009]windy数 数位dp
原题:https://www.luogu.org/problemnew/show/P2657题解:求区间不含前导0相邻两个数位之差至少为2的数。将区间拆开,考虑数位dp设f[i][j]为剩i位,当前位为j的方案数。显然f[i][j]=sum({[i-1][k]}(|k-j|>=2) 。用记忆化搜索就行了。细节:先导0要注意,可以将j设为11表示最高位为0的情况。#include...原创 2019-03-22 22:51:53 · 160 阅读 · 0 评论 -
[SDOI2010]粟粟的书架 主席树+二分+dp
原题:https://www.luogu.org/problemnew/show/P2468题解:题目的意思是在子矩阵中选出最小的数量,使这些数的和大于等于h。注意到有一半的数据明显不同,先考虑50分,暴力的做法是将这些数排序,从大往小选,但这样显然不行。注意到pi.j并不大,考虑dp的思想,val[i][j][k]表示(1,1)-(i,j)的矩阵所有大于等于k的数的和,num[i][j][k...原创 2019-04-05 21:23:23 · 137 阅读 · 0 评论 -
CF1000D Yet Another Problem On a Subsequence(dp)
The sequence of integers a1,a2,…,aka1,a2,…,ak is called a good array if a1=k−1a1=k−1 and a1>0a1>0 . For example, the sequences [3,−1,44,0],[1,−99][3,−1,44,0],[1,−99] are good arrays, and the seq...原创 2018-11-03 11:40:06 · 186 阅读 · 0 评论