![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
文章平均质量分 75
yzyyylx
这个作者很懒,什么都没留下…
展开
-
国王游戏证明
假设我们现在已经有了一个顺序,大臣左手的数字为A[1]A[1]A[1] ~ A[n]A[n]A[n],右手的数字为B[1]B[1]B[1] ~ B[n]B[n]B[n],国王则为A[0],B[0]A[0],B[0]A[0],B[0]现在我们交换位置为i,i+1i,i+1i,i+1两位大臣之间的位置交换前,两人的收益分别为1B[i]∏j=0i−1A[j]\frac{1}{B[i]}{\prod_{j=0}^{i-1}A[j]}B[i]1∏j=0i−1A[j]和A[i]B[i+1]∏j=0i−1A[j]原创 2022-03-17 23:39:31 · 194 阅读 · 0 评论 -
BZOJ 4318 OSU!
题面题意给出一串数,每个数字有a[i]的贡献是’O’,这串数字的分数定义为每一段连续的O的长度的立方和,OXXOO的分数就是13+23=9,求期望分数。做法我的做法是考虑以每一个数为该段最后一个数产生的贡献,dp时记三个数a,b,c分别表示这个数是O时,此时最后一段的长度,长度的平方,长度的立方的期望,转移时只要根据下面两式即可。(x+1)2=x2+2∗x+1(x+1)^2=x^2+2*...原创 2018-10-19 18:53:13 · 528 阅读 · 0 评论 -
HDU - 1693 Eat the Trees
题面题意给出一张网格图,用多条回路覆盖它的所有格子,问有几种方案。做法插头dp,在轮廓线上维护这些格子是否与下面的格子相连,并且维护当前的格子是否与左边的格子相连,也就是维护下面箭头两端的格子是否相连:然后只要用2(n+1)2^(n+1)2(n+1)的空间复杂度维护它们的连通性,用插头dp逐格转移即可。代码#include<iostream>#include<c...原创 2018-10-28 18:42:43 · 233 阅读 · 0 评论 -
URAL - 1519 Formula 1
题面题意给出一张网格图,用一条哈密顿回路覆盖它的所有格子,问有几种方案。做法这道题与HDU - 1693 Eat the Trees的区别在于此题只有一条回路,因此dp方法有所不同。同样是插头dp,可以发现对于每一条合法的回路,沿轮廓线将其切成两部分后,轮廓线上面的部分是多个联通块,且每个联通块与轮廓线恰好有两个交点,可以用括号序列来维护这两个交点,然后逐格递推时分情况转移即可,但因为状...原创 2018-10-29 17:50:51 · 207 阅读 · 0 评论 -
codeforces 1070J 2018-2019 ICPC,NEERC,Southern Subregional Contest Streets and Avenues in Berhattan
题面题意有mmm条横线,nnn条竖线,共有(n∗m)(n*m)(n∗m)个交叉点,k(k&amp;gt;=m+n)k(k&amp;gt;=m+n)k(k&gt;=m+n)个名字(每个名字是一个大写字母),现在要给这(m+n)(m+n)(m+n)条线命名,若构成一个交叉点的两条直线的名字相同,则这个交叉点不美丽,问不美丽的交叉点的最少个数是多少。做法首先任意一条横线与任意一条竖线都会有一个交...原创 2018-10-24 18:31:49 · 285 阅读 · 0 评论 -
The 2017 ACM-ICPC Asia Beijing Regional Contest H - Puzzle Game
题面题意给出一个矩形,每个格子上有一个数,并且你可以将其中一个数改成k(也可以不改),求修改之后的最大子矩形和的最小值。做法我们可以暴力枚举修改哪一个数,然后在所有修改方法中的结果取最小值即可。现在考虑维护修改一个数后的最大子矩形的值。可以发现,如果修改后的矩形并不包含修改的点,则此时修改后的最大子矩形一定在修改点的上面或下面或左面或右面,这个可以用O(n3)O(n^3)O(n3)的时...原创 2018-10-31 20:02:15 · 343 阅读 · 0 评论 -
BZOJ1808: [Ioi2007]training 训练路径
题面题意给出一棵树和几条非树边,每条非树边有一个权值,表示去掉它的代价,树边不能被去掉,问若要让图中没有偶环,至少要付出多少代价。每个点的度数小于等于10做法首先与树组成偶环的边直接去掉,然后我们可以将非树边看作树上两点间的路径,然后可以发现如果两条路径边的交集非空,则这两条非树边一定能与一些树边组成偶环。然后问题就转化为了:在一棵树上有一些路径,每条路径有一个权值,从中选择一些没有边...原创 2018-10-30 16:13:55 · 280 阅读 · 0 评论 -
BZOJ2331: [SCOI2011]地板
题面题意给出一张地图,请用“L”形地板覆盖所有非障碍的格子,“L”可以旋转,但两边的长度都必须大于0。做法因为数据范围非常小,所以可以用插头dp。对于插头我们记录三种状态:0:没有插头。1:有插头,且是未拐过弯的“L”。2:有插头,且是拐过弯的“L”。然后在转移时分3*3=9种情况分别转移,有点耐心就好了。代码#include<iostream>#include...原创 2018-10-30 18:52:10 · 199 阅读 · 0 评论 -
洛谷P2964 [USACO09NOV]硬币的游戏A Coin Game
题面题意有一叠硬币,每个硬币有一个币值,双方轮流操作,每个人至少取一枚硬币,最多取上一个人取的数量的两倍(第一个人最多取1枚),问先手至多能得到的硬币币值之和为多少。做法首先定义状态dp[i][j]dp[i][j]dp[i][j]表示还剩下iii枚硬币,上一个人取了jjj枚硬币时的最大币值和,然后发现如果暴力转移,则时间复杂度是O(n3)O(n^3)O(n3),但是我们可以发现dp[i][...原创 2018-11-04 07:58:01 · 313 阅读 · 0 评论 -
CodeForces - 559C Gerald and Giant Chess
题面题意有一个m*n的棋盘,其中有k个黑点,问从左上角向右下角走,每次只能向右或向下走,问有几种不经过黑点的走法。做法首先因为n*m很大,而k较小,因此从k开始考虑算法,首先可以发现从(a,b)-&gt;(c,d)只向右或向下的走法一共有C(b+d-a-c,b-a)种,然后考虑减去经过黑点的情况。对于这类题目我们不用根据一共经过哪些黑点来考虑,而是可以考虑第一个经过的黑点是哪一个来分类,...原创 2018-09-28 15:10:30 · 155 阅读 · 0 评论 -
Codeforces 388D Fox and Perfect Sets
题面题意一个集合如果是完美的,则集合如果包含a,b,那么a^b也一定在这个集合内,求所有最大数小于等于n的集合数量。做法对于完美集合,我们可以发现一个线性基一定对应一个合法的完美集合,因此我们可以对线性基进行数位dp,因为一个完美集合可以对应多种线性基,所以可以通过高斯消元使其唯一,也就是说,对于一个经过高斯消元的线性基的每一位,如果它是某个基的最高位,则只有那一个基的这一位为1,反之任何...原创 2018-09-27 09:44:54 · 754 阅读 · 0 评论 -
[NOI2015]寿司晚宴
题面题意给出n,在2~n中选择一些数,分成两组,使不存在两个数a,b,分别属于这两组数原创 2018-09-21 07:49:48 · 468 阅读 · 0 评论 -
HDU 4624 Endless Spin
题面题意给出一排球,初始全为白色,每次随机选择一段区间染黑,全黑时停止操作,问操作的期望次数。做法首先设pi表示i次完成的期望,这样答案就是1*p1+2*p2+3*p3………… 也就等于(p1+p2+p3………)+(p2+p3………)+(p3………)……. 令qi表示i次未全部染黑的期望次数,那么qi=p(i+1)+p(i+2)………………….. 因此答案就可以转化为...原创 2018-08-09 08:02:22 · 415 阅读 · 0 评论 -
HDU5470 Typewriter
题面题意给出一个字符串,现在你要打印它,你有两种操作: 1.在已打印字符串后面打印一个字符,代价为该字母的代价。 2.选择已打印的字符串的一个子串s,在后面复制粘贴,代价为|S|*A+2*B。做法第一个操作很好处理,难点在于第二个操作。 首先考虑dp[i]表示打印前i个字母所需要的代价,这样dp[i]=min(dp[i-1]+need[i],dp[j]+(i-j)*A...原创 2018-07-28 12:55:58 · 703 阅读 · 0 评论 -
POJ1185 炮兵阵地
题面题意给出一张地图,上面一些点可以放置炮兵,要求与炮兵在同一行或同一列的炮兵与它的距离都大于2,问:最多可以在图上放几个炮兵。 地图大小:10*100.做法从数据范围上不难发现要用状压dp来做,因为炮兵“攻击范围”是2,因此要状压2行,这样复杂度为至少为O(2^10^2*100)肯定会T,因此必须要优化。 可以发现,可以在转移时只考虑在行上合法的状态,只要当有10列时...原创 2018-08-01 15:47:10 · 341 阅读 · 0 评论 -
codeforces 513G3 Inversions problem
题面题意给出n(<=100)个数,每次操作随机选择一个区间翻转,求k(<=1e9)次操作后逆序对的期望数量。做法虽然操作次数范围为1e9,但是我们可以发现到了后面的操作,对答案的影响将越来越小,因此当操作数量特别大时,我们可以以前900(经过不断尝试得出的数字)次操作之后的答案为最终答案。 接下来就是概率dp,考虑每两个数组成逆序对后对答案的贡献,dp[i][j]...原创 2018-08-03 11:14:22 · 763 阅读 · 0 评论 -
[NOI2015]小园丁与老司机
题面题意给出n棵树,从原点开始,每次可以在左、右、上、左上 45∘、右上 45∘五个方向中选择一个,然后一直向这个方向走,直至走到一棵未经过的树,然后继续选择方向,直至5个方向都不存在未经过的树。 现在要经过尽可能多的树,输出最多可能经过的树的数量以及任意一条路径。 现在定义向上、左上 45∘、右上 45∘三个方向走形成的线段不优美,现在要覆盖所有最优路径中的不优美线段,每次从原点...原创 2018-08-29 17:26:10 · 463 阅读 · 0 评论 -
OIBH的NOIP模拟试题 巧置挡板
题面题意猫猫送走了客人,留住了蜗牛点点,晃晃悠悠走到池子边,又打起了鱼的主意。俯 瞰池子,猫猫发现鱼阵明显乱了。“难道鱼们故意让我无法下嘴?”猫猫看到正在池边散 步的点点,心想:“一定是他告的密……”猫猫愤怒地抓起点点,把他关进了抽屉里。 猫猫想:“好啊,鱼儿啊,你们不就是会传递信息吗?有什么了不起?用挡板把你 们隔离开,看你们还怎么交流!”猫猫随即从后花园里拿来若干挡板,打算...原创 2018-08-16 16:35:37 · 788 阅读 · 0 评论 -
BZOJ4622 [NOI 2003] 智破连环阵
题面题意有n个点需要被覆盖,你有m个半径为k的圆,每个圆覆盖的点是圆内(包括边界)编号连续的一些点,且每个圆只能使用一次,问至少要选择几个圆才能覆盖所有点。做法这个问题可以拆成两个子问题: 1.将n个点根据编号拆成k段。 2.判断m个圆与这k段的最大匹配是否是k。 可以发现第二个子问题可以用二分图的最大匹配轻松求解,而对于第一个子问题只能用搜索。 但是搜索的复杂度最...原创 2018-08-30 16:04:51 · 426 阅读 · 0 评论 -
[ZJOI2009]多米诺骨牌
题面题意给出一张矩形表格,一些地方有障碍物,向其中放1*2的多米诺骨牌(不用填满),要求任何相邻两行之间都有至少一个骨牌横跨,任何相邻两列之间也都至少有一个骨牌横跨,求方案数。做法为方便,用S(i,j,p,q)表示左上角为(i,j),右上角为(p,q)的子矩形 首先用dp预处理出dp[i][j][p][q]表示S(i,j,p,q)随意放骨牌的方案数(不考虑行列有无横跨),...原创 2018-09-02 18:36:47 · 927 阅读 · 0 评论 -
CodeForces 86C Genetic engineering
题面题意给出m个字符串,要求构建一个长度为n的母串,要求每个字符都被至少一个子串覆盖,问有几种方案。做法首先肯定要建出AC自动机,因为每个字符都要被覆盖,可以在匹配时不跳fail指针,除非此时恰好在一个子串的最后一位,但是这样显然会有重复,因此要考虑转化方式。 因为子串长度较小,所以可以考虑再加一维,记录此时有几位未被匹配,然后每次判断一下是否可以匹配掉这些的失配的字符。...原创 2018-07-27 11:03:22 · 1025 阅读 · 1 评论 -
[ZJOI2009]取石子游戏
题面题意从左到右有几堆石子,双方轮流取石子,每次取时只能从最左边或者是最右边的堆中取任意个石子,不能操作的人算输,问先手有无必胜策略。做法首先定义dp状态:left[i][j]left[i][j]left[i][j]表示在第iii堆石子到第jjj堆石子左边放left[i][j]left[i][j]left[i][j]个石子后是必败态。right[i][j]right[i][j]righ...原创 2018-11-04 15:17:00 · 1600 阅读 · 0 评论 -
Codeforces 1097D Makoto and a Blackboard
题面题意给出n,k,每次操作会在n的所有因数中随机选择一个,然后将n替换为这个因数,问经过k次操作后,n的期望值是多少。做法我们可以计算出经过k次操作后,n的每个质因子还有几个,比如将n分解质因数后得到25∗32∗422^5*3^2*4^225∗32∗42则我们可以用dp分别计算出经过k次操作后,n变成了2?∗3?∗4?2^?*3^?*4^?2?∗3?∗4?,分别计算出?的值,全部相乘即...原创 2019-01-05 11:57:59 · 383 阅读 · 0 评论 -
codeforces1119F Niyaz and Small Degrees
题面题意给出一棵有n个点的树,每条边有一个边权,对于[0,n−1][0,n-1][0,n−1]的每一个数x求,至少删掉权值和为多少的边后,所有点的度数都小于等于x.做法首先考虑对于一个x怎么做,记dp[i][2]dp[i][2]dp[i][2]表示第i个点与其父亲之间的边是否删去时,以i为根的子树最小要删去权值和为多少的点,转移时可以用堆处理出所有子节点t中dp[t][1]+val−dp[...原创 2019-04-12 19:54:13 · 459 阅读 · 0 评论 -
codeforces1153F Serval and Bonus Problem
题面题意在一条线段上随机放n个线段,则被至少k条线段覆盖的区间总长度期望为多少.做法首先可以发现这n个线段的2∗n2*n2∗n个端点期望把线段等分为2∗n+12*n+12∗n+1段,那么只要计算每一段的贡献即可.这个可以用dp求出每段区间被大于等于k条线段覆盖的方案数,再除以总方案数,即可得到每段区间对答案的贡献,然后就能统计答案了.代码#include<bits/stdc++....原创 2019-04-15 08:37:28 · 412 阅读 · 0 评论 -
[CQOI2012]局部极小值
题面题意将1,2,3…,m*n填入一个m∗nm*nm∗n的矩阵,要求一些位置满足比周围八个数都小,且其他位置不满足,则一共有几种方案.做法首先不考虑"其他位置不满足"这个要求,因为数据范围很小,因此最多有8个位置符合条件,可以状压dp.考虑将m∗nm*nm∗n个数从小到大依次填入矩阵,用dp[i][j]dp[i][j]dp[i][j]表示当前要求位置填的数的状态为i,其他位置一共填了j个的...原创 2019-04-15 10:20:53 · 442 阅读 · 0 评论 -
codeforces1155F Delivery Oligopoly
题面题意给出一张无向图,问至少保留几条边才能使此图是一个边双,并输出方案.做法考虑怎么构造出一个边双,发现可以通过在一个小边双上加一条链,使它变为一个新的大边双,所以可以记f[u][v][i]f[u][v][i]f[u][v][i]表示是否存在一条从u到v的链上包含了状态i的点,然后进行dp,dp[i]dp[i]dp[i]表示状态为i的点组成的边双至少要有几条边,用f数组进行转移即可.代...原创 2019-05-04 19:57:57 · 403 阅读 · 0 评论 -
Atcoder agc033 E - Go around a Circle
题面题意给出一个环,上面有n个点,将他划分为n段弧,现在要求对每段弧进行红蓝染色,要求染色完成后,从每个点开始通过在环上移动,经过的弧构成的字符串都可以成为给定的字符串,问一共有几种染色方法.做法首先要确定一些结论.假设给出字符串的第一个字符为’R’('B’同理).分两种情况进行讨论:1.给定字符串中的所有字符都相同可以发现环上不存在两个连续的弧且它们的颜色都是B,因此除了所有弧同...原创 2019-05-05 09:32:20 · 1028 阅读 · 0 评论 -
Atcoder agc033 D - Complexity
题面题意给出一个矩阵,若一个矩阵中的所有元素都相同,则这个矩阵的代价为0,反之可以将它分成两个子矩阵,代价为两个子矩阵的代价的较大值+1.做法因为答案是log级别的,所以可以考虑枚举答案,记dp[l][r][i]dp[l][r][i]dp[l][r][i]从第l行到第r行从第i列开始最多可以向右扩展到哪一列所形成的矩阵的代价为当前答案,若dp[1][n][1]=mdp[1][n][1]=m...原创 2019-05-05 11:55:37 · 487 阅读 · 1 评论 -
codeforces1146H Satanic Panic
题面题意平面上有n个点,两两之间连线后,求一共能构成多少个五角星.做法首先可以将五角星看作是有5个点的凸包,也就是5个极角排序后递增的向量首尾相接后得到的图形.因此可以记dp[x][y][i]dp[x][y][i]dp[x][y][i]表示从点x到点y经过i个线段的方案数,对所有向量(一个线段可以看作是两个向量)进行极角排序后,依次来更新dp值,这样∑i=1ndp[i][i][5]\su...原创 2019-05-07 10:05:14 · 234 阅读 · 0 评论 -
codeforces1149D Abandoning Roads
题面题意给出一张无向图,每条边的权值只有两种:a或b(a<b),现在对每个点求,在这张图的所有最小生成树中,1号点到它的最短距离是多少.做法首先在建最小生成树时,权值为a的边比权值为b的边的优先级高,因此可以先将所有边权为a的边缩起来,这样如果权值为b的边连接的点在同一个联通块中,则这条边没有价值.然后我们可以发现,如果一条路径经过某个联通块两次,则这条路径不可能出现在最小生成树上...原创 2019-05-12 21:19:07 · 357 阅读 · 0 评论 -
[ZJOI2019]麻将
题面题意共有n种麻将牌,给出一开始的13张麻将牌,问期望摸上来几张牌后,与开始的13张牌组合后存在一个大小为14的能和的子集.做法因为要求期望的摸牌次数,我们可以将这个次数转化为∑i=134∗np(i),p(i)\sum_{i=13}^{4*n}p(i),p(i)∑i=134∗np(i),p(i)表示总共有i张牌后仍然没和的概率,而p(i)=cnt(i)/A4∗n−13i−13,cnt(...原创 2019-04-11 07:41:10 · 483 阅读 · 1 评论 -
codeforces1111E Tree
题面题意给出一棵树,多次询问,每次询问给出一个根节点和k个点,问要求将它们划分为至多m个集合,要求每个集合中不包含存在祖先关系的点,则一共有几种方法。做法考虑单次询问怎么做,可以发现一个非常重要的性质,一个点的两个不同祖先不可能在同一个集合中,因此可以先将所有点根据到根节点的距离排序,记dp[i][j]dp[i][j]dp[i][j]表示前i个集合划分为j个集合的方案数,然后可得dp转移:...原创 2019-03-14 10:09:09 · 244 阅读 · 0 评论 -
洛谷P4831 Scarlet loves WenHuaKe
题面题意给出一个mn的棋盘,问在其中放2m个炮,使他们两两不会攻击的方案数是多少。做法当n,m都小于等于2000时,直接记录有几列放了一个棋子,几列没放棋子,即可逐行转移。当大于2000时,可以利用n−m&amp;lt;=10n-m&amp;lt;=10n−m&lt;=10的性质,考虑最后一列放几个棋子,分以下三种方案进行讨论:1.最后一列放两个棋子,考虑这两个棋子所在的两行的另外两颗...原创 2019-01-01 16:25:05 · 226 阅读 · 0 评论 -
codeforces1118F2 Tree Cutting (Hard Version)
题面题意给出一棵一共有k种颜色的树,每个点要么没有颜色,要么是k种颜色中的一种颜色,每种颜色至少出现一次,现在要你删去k-1条边,使每个连通块中有且仅有一种颜色,问有几种删法。做法首先判断无解的情况,可以发现如果一个有颜色的点为根的子树不包括所有这个颜色的点,则这个点与其父亲之间的边不可以被删去,我们可以据此将其父亲也染为与它颜色相同的颜色。因此,我们可以进行bfs,如果这一层中有多个颜...原创 2019-02-21 20:46:43 · 315 阅读 · 0 评论 -
codeforces1110H Modest Substrings
题面题意给出三个数l,r,nl,r,nl,r,n,求出一个由数字组成的字符串,使其所有子串中,符合在[l,r][l,r][l,r]内的数量最多,若有多组解,输出字典序最小的一个。做法首先考虑最朴素的做法,可以将[l,r]内的所有数字当作字符串加入一个AC自动机,直接在上面dp。但是因为l和r极大,因此需要优化。发现当一个数的长度确定,并且某一个前缀也确定之后,无论其后面填什么数,它都在[...原创 2019-02-22 13:46:40 · 245 阅读 · 0 评论 -
codeforces1129D Isolation
题面题意给出一个长度为n的序列,将它划分成一个或多个子串,使每个串中只出现过一次的数字个数小于等于m,求方案个数。做法记dp[i]表示前i个的答案,f(i)f(i)f(i)表示iii到nnn(nnn表示此时的右端点)的只出现一次的数字个数,则dp[n]=∑f(i)&lt;=mdp[i−1]dp[n]=\sum_{f(i)&lt;=m}dp[i-1]dp[n]=∑f(i)&...原创 2019-02-25 19:28:21 · 285 阅读 · 0 评论 -
codeforces258D Little Elephant and Broken Sorting
题面题意给出n个数,有m次操作,每次操作给出两个数,会有50%的概率交换这两个数,问m次操作后逆序对的期望数量。做法我觉得这题的难点主要在于dp状态的设计。可以记dp[i][j]dp[i][j]dp[i][j]表示第i个位置上的数比第j个位置上的数大的概率。这样开始dp[i][j]=(num[i]&gt;num[j])dp[i][j]=(num[i]&gt;num[j]...原创 2019-03-01 22:10:11 · 212 阅读 · 0 评论 -
2018-2019 ACM-ICPC, Asia East Continent Finals J. Philosophical … Balance
题面题意多组数据,每组数据给出一个长度为n的字符串S,求maxi∑j=1nlcp(i,j)∗kj\max_{i}{\sum_{j=1}^{n}lcp(i,j)*k_{j}}maxi∑j=1nlcp(i,j)∗kj的最小值其中kik_{i}ki由你定,但是要满足∑i=1nki=1\sum_{i=1}^{n}k_{i}=1∑i=1nki=1,且0&amp;amp;lt;=ki&amp;amp;lt...原创 2019-03-05 17:58:26 · 554 阅读 · 0 评论 -
codeforces1132G Greedy Subsequences
题面题意给出n个数和一个数m,求区间[1,m],[2,m+1]......[n−m+1,n][1,m],[2,m+1]......[n-m+1,n][1,m],[2,m+1]......[n−m+1,n]的最长贪心子序列,最长贪心子序列的求法是,在每个数后面接上右边第一个比它大的数。做法这几个询问区间可以看作是在原区间的左边加数,右边删数。如果我们记dp[i]表示以该位置为结尾的子序列的...原创 2019-03-06 10:37:45 · 370 阅读 · 0 评论