
dp
文章平均质量分 74
新笑雨
这个作者很懒,什么都没留下…
展开
-
ABC 214 F
题目地址 题目大意 有一个长度为n(n<=2∗105)n(n<=2*10^{5})n(n<=2∗105)的字符串,可以选择一些位置(这些位置不能相邻)组成新的子串(不能调换字符的相对位置),问一共可以选出多少种不同的子串,输出答案对1e9+71e9+71e9+7取模 思考 一般子序列的题都要靠dp解决? 设f[i]f[i]f[i]为第iii个位置必须选的合法答案数量。 第一种转移比较显然: f[i]=f[i]+f[j],(j==0∣∣j<i−1),其中f[0]=1f[i]=f[i]+原创 2021-08-20 16:12:05 · 202 阅读 · 0 评论 -
一道区间dp题
题意 你有一个有序的数组,现在要插入一个新的数,相信你一定学过二分查找,也知道最坏情况下需要比较几次才能找到新的数该插入什么位置,但是现在,我们稍微改变下套路,把新的数与数组中的每一个数比较都会有一个特定的代价,代价在1-9之间,求最坏情况下,假设你采用最优的比较策略,你会花费多少费用插入新的数。 数据范围 有t(t≤10)t(t\le 10)t(t≤10)组数据,数组大小n≤100000n\le 100000n≤100000 解法 首先考虑一个常规的区间dp:f[l][r]表示查询[l,r]中任意一个数的原创 2020-05-11 20:37:18 · 169 阅读 · 0 评论 -
codeforces 1083E
luogu链接 解法 首先可以观察到所有矩形排成了类似楼梯的形状,所以如果对x排序,y也是有序的。 先按x从小到大排序 然后考虑dp:f[i]表示最后一个矩形选择的是第i个的最大价值f[i]表示最后一个矩形选择的是第i个的最大价值f[i]表示最后一个矩形选择的是第i个的最大价值 转移:f[i]=maxj=1i−1(f[i],f[j]+y[i]∗(x[i]−x[j])−a[i])f[i]=max_{...原创 2020-04-21 20:00:47 · 5253 阅读 · 0 评论 -
AGC030F
luogu链接 解法 考虑如果A中的两个相邻位置都确定了的话,这两个位置所对应的B的位置不会对B的方案产生影响,直接不管就可以了。 如果建立图论模型,可以发现B的每一个数相当于对A中的两个数匹配后,较小的值 然后记录每个数是否在A中出现过,然后可以从大到小dp: f[i][j][k]f[i][j][k]f[i][j][k]表示考虑了≥i\ge i≥i的所有位置,其中有jjj个已经在A中出现的还需要...原创 2020-04-08 16:34:58 · 234 阅读 · 0 评论 -
codeforces 704B
luogu链接 解法 高妙的dp: 首先调整一下权值: ai=ai+xi,bi=bi−xi,ci=ci+xi,di=di−xia_i=a_i+x_i,b_i=b_i-x_i,c_i=c_i+x_i,d_i=d_i-x_iai=ai+xi,bi=bi−xi,ci=ci+xi,di=di−xi 这样就可以: f(i,j)=di+aj  ...原创 2020-03-30 21:20:10 · 216 阅读 · 0 评论 -
一道线段树练习题
题意 注意收到的伤害值写的有点问题,实际上是a2+∑j=1k(Ai,j−Cj)2\sqrt{a^2+\sum_{j=1}^k(A_{i,j}-C_j)^2}a2+∑j=1k(Ai,j−Cj)2,没有后面的-a 数据范围 时限6S 解法 首先由于题目中的限制“选了第i个敌人就再也不能和1到i-1的敌人作战”,我们可以观察后得出dp:ans[i]=min(ans[u]+∑j=1k(Ai,j...原创 2020-02-24 17:17:38 · 155 阅读 · 0 评论 -
codeforces 1303E
题目链接 题意 有一个字符串s,和一个字符串t,问可不可以将t分为前后两个部分,使得每个部分都对应一个s中的子序列,且这两个子序列不相交。 数据范围 字符串总长<=400 解法 首先有一个naive的O(n4)O(n^4)O(n4)解法,设dp状态f[i][j][k]表示考虑到s串的第i个字符,t的前半部分考虑到的位置为j,后半部分考虑到的位置为k的状态是否可行,然后需要枚举前半部分的总长。...原创 2020-02-16 16:43:45 · 188 阅读 · 0 评论 -
codeforces 498B
题目链接 题意 用T秒时间按顺序听N首歌,第i首歌播放时间为ti秒,且每播放一秒都会有pipi的概率被识别出来,跳到下一首。若某首歌播放时间过完仍未被识别出,也跳到下一首。若时间有剩余而歌已全部听完则直接结束。求听歌数量的期望。1≤N,T≤5000 解法 DP 首先考虑一个暴力dp: dp[i][j]表示听了前i首歌,花了j的时间的概率。然后转移考虑枚举最后一首歌花了多少时间: dp[i][j]=...原创 2020-02-08 11:12:52 · 177 阅读 · 0 评论 -
codeforces 1292C
题目链接 题意 有一棵n个点的树,要给树上的每一条边一个不同的权值,范围在0~n-1,要求 S=∑1≤u<v≤nmex(u,v)S=\sum_{1\le u<v\le n} mex(u,v)S=∑1≤u<v≤nmex(u,v)最大,输出SSS 数据范围 n≤2000n\le 2000n≤2000 解法 dp 首先考虑把mex转化一下,可以变成对于一条路径,有权值0时答案加上所有...原创 2020-01-27 19:12:39 · 255 阅读 · 0 评论 -
bzoj 4681
题目链接 题意 有一张边有权的无向图,现在要从1号点前往n号点,然后可以交换k次边权,问最短路最短是多少 数据范围 n≤50,m≤150,k≤20n\le 50,m\le 150,k\le 20n≤50,m≤150,k≤20 解法 最短路:考虑现在在一个点上,需要多计算的状态有什么:首先我们需要知道走到这个点上交换了几次边权,然后还有现在边的状态. 第一个很好记录,但是第二个并不好办.所以考虑加上...原创 2020-01-11 13:50:42 · 225 阅读 · 0 评论 -
codeforces 1263F
题目链接 题意 给两棵有根树,叶子数相同,每个叶子都连接着某个电机,同一棵树的叶子连着不同的电机,电机数等于叶子数,问最多可以删掉几条边,使得每台电机至少连接着一个树根 数据范围 叶子数num≤1000,树的节点个数n,m≤2000叶子数num\le 1000,树的节点个数n,m\le 2000叶子数num≤1000,树的节点个数n,m≤2000 解法 dp 设val[0/1][l][r]表示第0...原创 2020-01-07 19:44:43 · 245 阅读 · 0 评论 -
多重背包的优化方法
orz zrf 首先,经典的多重背包解法,是把一个物品分成该物品的总数份,然后做01背包 第一个优化方法是把一个物品呢分成O(log(该物品的总数份))O(log(该物品的总数份))O(log(该物品的总数份)),举个例子: 如果物品有2n−12^n-12n−1个,就分成20,21,...,2n−12^0,2^1,...,2^{n-1}20,21,...,2n−1,这样.如果不是2n−12^n-1...原创 2019-12-27 17:31:59 · 199 阅读 · 0 评论 -
模拟费用流或dp
buinss 题意: 有一棵n(n<=1e5)个节点的完全二叉树,每个节点有ai个果实. 然后有m(m<=1e5)次操作,每次操作会选取一条直上直下的链,操作有两个属性,分别是能拿走ci个果实.取走每个果实的支付的钱wi.要求为每次操作选择拿哪些果实.然后使得支付的钱最多. 部分分解法:wi=1 此时我们考虑每一条链,会发现尽量先取链顶深度大的,而且尽量取在较深的位置会比较优.所以我们...原创 2019-12-20 21:15:04 · 244 阅读 · 0 评论