
DP
ymzqwq
这个作者很懒,什么都没留下…
展开
-
[bzoj1899][ZJOI2004]Lunch 午餐
传送门 这道题在洛谷上是ZJOI2005,在bzoj上是Zjoi2004。。 很明显,在一组中,吃饭时间长的先排队。 用f[i][j]f[i][j]f[i][j]表示前iii个人排队时间总和为jjj时的总时间,然后考虑一下第iii个人排那个窗口,瞎dp一波就行了。 我一开始竟然没有想出来。。没有想出来。。出来。。来。。让我做一只安静的菜鸡好了#include<cstdio...原创 2018-04-14 10:07:59 · 201 阅读 · 0 评论 -
TopCoder SRM 581 Div1 500 TreeUnion
一个环肯定是由两棵树中的边与中间连接的两条边组成的 那么我们就可以用c[0/1][k]c[0/1][k]c[0/1][k]表示两棵树中长度为kkk的链的数量 最后的期望就是c[0][i]×c[1][K−2−i]×2×(n−2)!n!c[0][i]×c[1][K−2−i]×2×(n−2)!n!\frac{c[0][i]\times c[1][K-2-i]\times 2\times (n-2)!...原创 2018-09-13 14:30:30 · 308 阅读 · 0 评论 -
TopCoder SRM 575 Div1 500 TheSwapsDivOne
每个数只有两种情况,要么在原来的位置上,要么不在。于是我们用一个简单的dp求出两种情况的概率。f[i][0/1]f[i][0/1]f[i][0/1]:Swap了iii次后,0表示不在原来位置上,1表示在,的概率。转移方程f[i][1]=f[i−1][1]∗(n−2)/n+f[i−1][0]∗2/n/(n−1)f[i][1]=f[i-1][1]*(n-2)/n+f[i-1][0]*2/n/...原创 2018-10-03 15:28:04 · 243 阅读 · 0 评论 -
[Codeforces 1042E] Vasya and Magic Matrix(期望DP)
传送门没事干来划个水(喂喂喂,想想你还有多少题没补w(゚Д゚)w这题是个非常水的期望DP我们先按格子从小到大排个序然后用f[i]f[i]f[i]表示iii从iii这个格子出发的期望得分最小的那些格子的f值显然是0啦大的格子的f值显然是从比它小的转移来的啦转移方程大概长这个样子,假设比第iii个格子小的共有sss个,jjj是权值比iii小的那些格子f[i]=∑(f[j]+(x[i]−...原创 2018-09-27 10:03:08 · 324 阅读 · 0 评论 -
TopCoder SRM 666 Div1 444 SumOverPermutations
感觉是道好题~原来碰到这种排列的dp就一脸懵逼,因为状态特别难设计,每次都感觉只会状压,现在终于有点get到其中的套路了。在这题里我们可以发现几个事实每个位置对答案的贡献只和它左右两边是否比它早确定有关我们可以通过将iii插入111到i−1i-1i−1的排列中得到所有111到iii的所有排列于是我们可以弄一个f[o][i][j]f[o][i][j]f[o][i][j]表示到第ooo个...原创 2018-10-16 21:21:29 · 181 阅读 · 0 评论 -
TopCoder SRM 691 Div1 500 Moneymanager
学习了DP的新姿势QAQ首先应该不难发现如果无视XXX的话整个序列应该是按a[i]/b[i]a[i]/b[i]a[i]/b[i]从大到小排列的,这个就是个很基础的贪心吧,证明用的也是贪心中最常见的方法:交换相邻元素。然后我们考虑一下这个XXX对答案的贡献其实就是X⋅∑i=n/2+1i=nb[i]X \cdot \sum_{i=n/2+1}^{i=n}b[i]X⋅∑i=n/2+1i=nb[i]...原创 2018-10-28 18:33:16 · 225 阅读 · 0 评论 -
TopCoder SRM 690 Div1 500 TreeWalker
一题磨了一晚上,其实根本不难,就是我太菜了。我们稍加考虑,就会发现题目求的实际上是2×∑2n−1−dis(i,j),(i&lt;j)2 \times \sum 2^{n-1-dis(i,j)},(i&lt;j)2×∑2n−1−dis(i,j),(i<j),稍加变形,就是2n×∑2−dis(i,j),(i&lt;j)2^{n} \times \sum 2^{-dis(...原创 2018-10-28 21:08:04 · 217 阅读 · 0 评论 -
TopCoder SRM 684 Div1 600 DivFree
又是一道神奇的题最开始就想到容斥,结果写完了之后过不了样例,意识到我那个容斥好像并不满足容斥那个组合数的条件。。然后标算的容斥刷新了我对容斥的认识= =先预处理出dp[i]dp[i]dp[i],表示长度为iii的不合法序列数(dp[1]dp[1]dp[1]事实上是合法的,但还是把它算出来)我们用h[i]h[i]h[i]表示长度为iii的合法序列个数,考虑我们在h[i−1]h[i-1]h[i...原创 2018-10-22 11:48:17 · 293 阅读 · 0 评论 -
TopCoder SRM 712 Div1 600 AverageVarianceSubtree
卡精度没素质。。。。今天才知道有__float128这种东西,问了一下noip不能用。。。DescriptionDescriptionDescription传送门nnn个点的树,每个点有一个权值,任选一棵非空子树,求其中所有点方差的期望。SolutionSolutionSolution裸的树形DP,感觉不值600,不过之前做过另一道树形DP也是600…反正这种题吧,大概xy肯定会说要...原创 2018-10-31 18:53:05 · 213 阅读 · 0 评论 -
TopCoder SRM 713 Div1 500 DFSCount
#include &amp;lt;bits/stdc++.h&amp;gt;#define ll long long#define fr(i,x,y) for(int i=x;i&amp;lt;=y;i++)#define rf(i,x,y) for(int i=x;i&amp;gt;=y;i–)#define frl(i,x,y) for(int i=x;i&amp;lt;y;i++)using names原创 2018-11-01 15:38:09 · 513 阅读 · 0 评论 -
Codeforces 1129C - Morse Code
官方题解给了一个离线做法,而且是O(m2+m2logm)O(m^2+m^2logm)O(m2+m2logm)的,我的做法是在线的O(m2)O(m^2)O(m2)。我是用Trie树做哒,碰到子序列子串之类的问题有时候想想Trie树会有奇效喔QAQ我们可以发现,不同的0/1子序列答案不会重复,那么就可以对所有不同的的0/1子序列计算有多少种英文刚好构成这个子序列。而Trie树上不会有相同的两个字符串...原创 2019-03-07 16:12:05 · 356 阅读 · 0 评论 -
AtCoder Grand Contest 036D - Negative Cycle
神仙题?反正我是完全想不到哇QAQ这场AGC真的很难咧×10086\times 10086×10086Description\bf DescriptionDescription一张 n 个点的图,i 到 i+1 有连边。现在来了个Snuke,他会给所有 (i,j),i≠j(i,j) ,i \ne j(i,j),i̸=j 连边,如果 i<ji<ji<j ,...原创 2019-07-24 08:42:52 · 232 阅读 · 0 评论 -
TopCoder SRM 579 Div1 450 TravellingPurchasingMan
其实是个很水的状压DP,我还WA了三发。。用f[i][j]f[i][j]f[i][j]表示访问过的商店状态为iii,当前刚从jjj出来,所需的最小时间。然而有一些细节。。#include <bits/stdc++.h>using namespace std;const int M=16;const int N=51;int f[1<<M][M],m;int ...原创 2018-09-18 14:55:19 · 272 阅读 · 0 评论 -
TopCoder SRM 639 DIv2 1000 BoardFoldingDiv2
可以发现行和列其实没什么关系,于是我们愉快地分开处理,最后相乘。比如说现在在处理纵向的折痕: 我们先把每列压成一个数,存入数组aaa,这样就可以O(1)比较两列是否相等。 然后我们再预处理出f[i]f[i]f[i],表示以i,i+1i,i+1i,i+1为中心的回文长度。 再用dp[i][j]dp[i][j]dp[i][j]表示折成第iii列到第jjj列是否可行,枚举折在哪里即可。复杂...原创 2018-09-07 10:05:01 · 222 阅读 · 0 评论 -
[bzoj1057][ZJOI2007]棋盘制作
传送门图上的棋子有两种类型: 1.黑格行列奇偶性相同,白格不同 2.白格行列奇偶性相同,黑格不同判断同不同的话,直接异或就可以了。 然后问题就转化为求最大01子矩阵了 感觉这个真的挺巧妙的,要是不转化的话,大概会写吐?以下是一些废话。。(没错我越来越话痨了 统计矩形本来写了悬线法,然后有个地方忘记了怎么写,就写错了,结果竟然只有vijos上TLE(没错我就是有每个oj交一遍的...原创 2018-04-14 10:30:07 · 198 阅读 · 0 评论 -
[luogu1415] 拆分数列
传送门 f[i][j]f[i][j]f[i][j]表示以i~j这一段为第一个数时,最后一个数的最小值。 我采用的是刷表法,每次枚举kkk更新f[k][i−1]f[k][i−1]f[k][i-1]即可。 最后说一句,输出方案的题目真恶心。#include<iostream>#include<cstdio>#include<cstring>#incl...原创 2018-04-20 17:52:29 · 236 阅读 · 0 评论 -
[LightOJ 1038] Race to 1 Again
传送门 以前几乎都没有做过概率期望之类的东西。。 这个很基础了QAQ题意:一个数每次会以相同概率变成它的一个因子,问期望几次达到1。那么f[i]f[i]f[i]表示iii达到111的期望步数,显然f[1]=0f[1]=0f[1]=0 设xxx的mmm个因子分别为a1,a2,...,am(am=x)a1,a2,...,am(am=x)a_1,a_2,...,a_m(a_m=x),那么f...原创 2018-07-22 18:46:05 · 226 阅读 · 0 评论 -
[hdu4045]Machine scheduling (DP+第二类斯特林数)
传送门 (这题没明确讲多组数据害我WA了一发)可以把题目分成两个部分 - 从n个机器中选出r个 - 将r个机器分成不超过m组第二个子问题很明显是第二类斯特林数,即∑mi=1Sr,i∑i=1mSr,i\sum_{i=1}^{m}S_{r,i}比较棘手的是第一个子问题,网上的题解多是插板法不再赘述,这里提供一种DP的做法。 用f[i][j]f[i][j]f[i][j]表示当前选...原创 2018-07-27 16:07:13 · 249 阅读 · 1 评论 -
[POJ 2411] Mondriaan's Dream (轮廓线DP)
传送门轮廓线DP基础题。不得不说轮廓线DP的思想真的很精妙,但是轮廓线状态的表示方法我也是看了好久才理解。 轮廓线的状态不是按照一般状压DP不太一样,个人觉得这篇博客讲得比较简短清楚,这篇博客虽然具体但是不太清晰,再结合一下代码应该就能理解了。话说我之前学的时候明明看到一篇很好的博客啊,现在怎么死活找不着了。。#include&lt;cstdio&gt;#include&lt;...原创 2018-07-28 10:25:21 · 228 阅读 · 0 评论 -
TopCoder SRM 570 Div2 1000 CentaurCompanyDiv2
这次的1000算简单的,就是统计有几个子树。 树形DP一波,f[i]f[i]f[i]表示以iii为根的子树数量,枚举儿子,转移有三种种情况:只连之前的儿子(f[i]f[i]f[i])只连当前儿子(f[v[i]]+1f[v[i]]+1f[v[i]]+1)都连(f[i]∗(f[v[i]]+1)f[i]∗(f[v[i]]+1)f[i]*(f[v[i]]+1))分别计数即可。#inc...原创 2018-08-14 08:48:48 · 266 阅读 · 0 评论 -
TopCoder SRM 570 Div1 550 CentaurCompany
和Div2的1000类型差不多,都是个很套路的树形DP 我的做法暴力得要死,天晓得怎么过的。。 f[0/1][i][j][k][l]f[0/1][i][j][k][l]f[0/1][i][j][k][l],0/1表示第iii个节点在哪个公司,jjj表示humanhumanhuman公司有几人,kkk表示humanhumanhuman公司有几个联通块,lll表示horsehorsehorse公司...原创 2018-08-14 16:07:02 · 347 阅读 · 0 评论 -
TopCoder SRM 682 Div2 1000 FriendlyRobot
大概思路是用f[i][j]f[i][j]f[i][j]表示当前执行到第iii个操作,改变了jjj次时回到原点的最大次数,并且此时刚好在原点(这是为了方便转移)。然后每次只需要枚举一个kkk,计算出执行完(i,k](i,k](i,k]这一段操作后再回到原点需要修改几个,就可以进行转移。 少写了一句判断状态是否可行害得我懵逼了好久(感谢xLLLx帮我Debug)#include &amp;lt;bits...原创 2018-08-07 14:53:50 · 186 阅读 · 1 评论 -
[hdu 4109] Instrction Arrangement
传送门 就是个关键路径嘛,我一开始dfs还写挂了,于是上网找题解,怎么清一色topsort??这还叫我怎么贺 压根就不用啊,记忆化搜索具有天然拓扑序。 怎么感觉网上好多题解都是贺来贺去的 再次被hdu的多组数据坑了一发#include<bits/stdc++.h>#define lson (x<<1)#define rson (x<<1|1)#...原创 2018-08-03 15:20:29 · 203 阅读 · 0 评论 -
TopCoder SRM 573 Div2 1000 WolfPackDivTwo
这题被边界问题坑了,我以为不会出事的,结果出了大事,cout,printf,还有不输出的答案全是不一样的,这波操作看得我一脸懵逼。。这题还挺简单的。用f[i][j][k]f[i][j][k]f[i][j][k]表示走了iii步,向右移动jjj个单位,向上移动kkk个单位,DP一波预处理出来。最后暴力枚举到哪个点,统计答案。#include &lt;bits/stdc++.h&gt;usi...原创 2018-08-28 14:19:43 · 290 阅读 · 0 评论 -
TopCoder SRM 580 Div2 1000 WallGameDiv2
可以发现,Eel完全可以把路堵得很死,使得Rabbit只有一条路可走。 并且Rabbit很聪明不会没事找抽往回走的。 于是问题就转化为,从左上走到最后一行路过格子的权值和最大是多少。 可以很容易地用DP解决,f[i][j][k]f[i][j][k]f[i][j][k]表示走到(i,j)(i,j)(i,j),且接下去方向为k的答案。 特别需要注意的一点是走到最后一行就会立刻结束。PS:感...原创 2018-09-02 19:28:07 · 278 阅读 · 0 评论 -
TopCoder SRM 589 Div2 1000 FlippingBitsDiv2
感觉讲不清。。#include &lt;bits/stdc++.h&gt;using namespace std;const int N=2501;string s;int n;int f[N][2],d[N][2],a[N][2];template&lt;class T&gt; void checkmin(T &amp;a,const T &amp;b) { if (b&lt;原创 2018-09-12 07:30:39 · 387 阅读 · 0 评论 -
[BZOJ4553][HEOI2016/TJOI2016]序列
传送门好像是DP再套个裸的CDQ?树套树是不可能写树套树的,这辈子都不可能写树套树的对于一个 iii ,设它最小为 aia_iai ,原数为 bib_ibi ,最大为 cic_icifif_ifi 表示 iii 结尾的最长子序列, fi=fj+1f_i=f_j+1fi=fj+1 , jjj 要满足j<ij<ij<icj≤bic_j \le...原创 2019-07-31 20:44:22 · 245 阅读 · 0 评论