< 动态规划 >
FuTaimeng
好像有人说我冰雪聪明~~~
展开
-
And Then There Was One UVALive - 3882
And Then There Was One UVALive - 3882动态规划 http://blog.csdn.net/TIMELIMITE/article/details/46316025题目大意:经典约瑟夫环问题。n是规模,k是每次数的人数,m是第一个出列的人。题解:但是暴力用链表做肯定是不行的,因为 1 <= n <= 10000 , 1<= k <= 10000 1 <=转载 2017-06-02 13:36:41 · 279 阅读 · 0 评论 -
Machine Works UVALive - 5133
Machine Works UVALive - 5133超哥线段树优化Dp题解:裸方程很好想:fi=max{fj+Gj∗(Di−Dj−1}−Pi+Rif_i=\max\{f_j+G_j*(D_i-D_j-1\}-P_i+R_i当前面的max小于Pi的时候fi=−inff_i=-\inf.时间复杂度:O(n2)O(n^2).其实就是维护一次函数的最大值。直接超哥线段树即可。正解好像是单调队列 ?Cod原创 2017-09-07 19:35:42 · 338 阅读 · 0 评论 -
BZOJ1009: [HNOI2008]GT考试
BZOJ4423: [AMPPZ2013]Bytehattan对偶图·并查集题解: http://www.cnblogs.com/lcf-2000/p/6217985.html 删除一条边可以看做把两个空块连通。当删除一条边时这条边紧邻的两个空块已经连通了,那么删除这条边会导致这条边的两个顶点不连通。 仔细想想觉得非常有道理。当删除一条边时发现这条边紧邻的两个空块已经连通了,那么删除这条边原创 2017-09-09 11:21:18 · 296 阅读 · 0 评论 -
BZOJ2216: [Poi2011]Lightning Conductor
BZOJ2216: [Poi2011]Lightning ConductorDp·决策单调性题解:pi=max{aj−|i−j|−−−−−√}−aip_i=\max\{a_j-\sqrt{|i-j|}\}-a_i只想出一个O(nn√logn)O(n\sqrt{n}\log{n})的暴力QwQ 我们发现对于一个i,|i−j|−−−−−√\sqrt{|i-j|}的上取整是分段的,这样的段有O(n√)O原创 2017-09-02 23:50:40 · 307 阅读 · 0 评论 -
送分题 - hzw模拟赛Test10
送分题 - hzw模拟赛Test10Dp题解:啊啊啊好难啊,送分题都这么难。。。• 这题可以先设 f(u; k) 表示以节点 u 为根的⼦树中,在⽅案 合法的情况下,选中的点中离 u 最近的那个点距离⾄少为 k 的时候的答案 • 然后开始考虑如何转移,对于某个节点 u 来说,假设我们已 经处理出 f(u; k) 了,那么再添加⼀棵⼦树给 u,就应该考虑 如何更新 f(u; k),也就是我们原创 2017-10-17 17:51:59 · 274 阅读 · 0 评论 -
[USACO17FEB]Why Did the Cow Cross the Road II P
[USACO17FEB]Why Did the Cow Cross the Road II P树状数组·特殊的Dp更新方式题解:类似最长公共子序列的方程: f[i][j]=max( f[i-1][j], f[i][j-1] ) f[i][j]=max( f[i][j], f[i-1][j-1]+1 ) 当i、j可以匹配我们发现+1的位置很少,想办法只处理这些有贡献的。 也就是要快速推知f[i-原创 2017-10-18 12:13:35 · 486 阅读 · 0 评论 -
graph - hzw模拟赛Test13
graph - hzw模拟赛Test13Dp题解:注意到,如果按照要求走,这个图是没有环的!然而我一开始并没有注意到这一点(或者是没仔细往下想),去写spfa了。。。简单说一下我2s+的spfa,就是d[i][j]表示在i这个点,上一条边距离为j的最长路径的边数。注意到一个点均摊只有O(1)个有用状态,因此可以把j表示成能到达i点的第j大的边,另外开一个vector保存具体长度是几。当然d和vis也原创 2017-10-18 20:32:36 · 260 阅读 · 0 评论 -
[USACO13NOV]POGO的牛Pogo-Cow
[USACO13NOV]POGO的牛Pogo-CowDp题解:1000的数据,Luogu上被n^3水过,500ms+我能怎么办,我也很绝望啊~f[i][j]表示第i个从第j个转移过来的最大价值 边界:f[i][i]=c[i] 转移:暴力枚举下一个——————乱搞分割线—————— (严肃脸) i是当前,j是上一个,k是下一个 k只能从连续的一段j中转移 或许正解是log维护区间的max?原创 2017-10-04 22:39:43 · 400 阅读 · 0 评论 -
[USACO13MAR]牛跑The Cow Run
[USACO13MAR]牛跑The Cow Run区间Dp题解:蓝书上有道修长城的题目和这个类似啊 好像那个每个点单位时间带来的花费还不一样没关系,都是一种做法很明显任意时刻解决掉的牛都是一段连续的区间 设f[i][j][0/1]表示已经解决了[i,j]的牛,当前站在i或j,的最小花费 转移很简单,详见代码 注意要从0出发,因此添加0的虚拟点,排序后的位置设为s 边界f[s][s][0/1原创 2017-10-04 22:55:48 · 738 阅读 · 0 评论 -
[USACO13NOV]没有找零No Change
[USACO13NOV]没有找零No Change状压Dp题解:f[S]表示用了集合S里的coin之后做多购买前多少个。 转移的时候枚举一个coin,二分一下。 统计答案的时候,所有f[S]==n的算出钱数来,取个min。Code:#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#defi原创 2017-10-05 08:37:09 · 486 阅读 · 0 评论 -
BZOJ3037: 创世纪
BZOJ3037: 创世纪树形Dp题解:先来考虑树上的情况,设f[u][0/1]表示u的子树中,这个点选或者不选的答案。 如果不选u,则其子节点v没什么限制,f[u][0]=∑max(f[v][0],f[v][1])f[u][0]=\sum \max (f[v][0],f[v][1]). 如果选u,则子节点至少一个不选,f[u][1]=∑v!=tmax(f[v][0],f[v][1])+f[t]原创 2017-10-20 11:55:25 · 675 阅读 · 0 评论 -
[USACO16DEC]Team Building团队建设
[USACO16DEC]Team Building团队建设动态规划题解:先排序。 设f[i][j][k]. 从f[i][j-1][k],f[i-1][j][k],f[i-1][j-1][k-1](a[i]>b[j]) 但是前两种途径有重复的:f[i-1][j-1][k]被加了两遍,减掉。Code:#include <algorithm>#include <iostream>#include原创 2017-10-11 18:43:48 · 414 阅读 · 0 评论 -
BZOJ3594: [Scoi2014]方伯伯的玉米田
BZOJ3594: [Scoi2014]方伯伯的玉米田动态规划·二维树状数组题解:感觉自己Dp好弱啊,啥也想不出来。。。QwQ。有一个结论,提升[l,r]可以用提升[l,n]来替代,总不会更坏。 (像这种区间长度没有限制自由度很高比较棘手的一般就是找个最优性结论限制住)设f[i][j]表示前i个提升j次的最长LIS长度。 f[i][j]=maxf[k][l](k<i,l≤j,ak+l≤ai+j)原创 2017-08-29 11:53:34 · 373 阅读 · 0 评论 -
LA5106: Let the light guide us
LA5106: Let the light guide usDp·树状数组题解:裸方程: 当|j−k|<=magic[i−1][k]+magic[i][j]|j-k|<=magic[i-1][k]+magic[i][j]时, f[i][j]=min{f[i−1][k]}+cost[i][j]f[i][j]=min\{f[i-1][k]\}+cost[i][j]时间复杂度:O(nm2)O(nm^2原创 2017-09-05 16:09:54 · 338 阅读 · 0 评论 -
Tiling Dominoes UVA - 11270
Tiling Dominoes UVA - 11270动态规划·插头dp题目大意:求n*m的棋盘上用1*2和2*1的骨牌完全覆盖的方案数。题解:经典的插头dp,详见代码。Code:#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long LL;LL f[2][1<<1原创 2017-06-02 20:42:14 · 218 阅读 · 0 评论 -
Sub
Sub动态规划 来自 6.3 省选集训 Day6 T1 下面给出的是60分做法题目大意:给定一个长度为 n 的只包含前 9 个小写字母的字符串 s, q 个询问 s[l,r] 中有多少本质不同的子序列。答案对 10^9 + 7 取模。 s[l,r] 的子序列 (p1, p2, · · · , pk) 需要满足: l ≤ p1 < p2 < · · · < pk ≤ r。(不一定连续)原创 2017-06-04 11:12:28 · 719 阅读 · 1 评论 -
BZOJ1537: [POI2005]Aut-The Bus
BZOJ1537: [POI2005]Aut- The Bus线段树优化DP题解:把点从左往右从低到高排序,易得: f[i]=maxf[j]+p[i](j<i,yj<yi)f[i]=\max f[j]+p[i](j<i,y_j<y_i) 这样把y坐标开成线段树,扫到一个点先查询后加入就行了。Code://我忘了放哪了QWQ//真的不是懒得没写啊原创 2017-08-17 11:48:56 · 268 阅读 · 0 评论 -
BZOJ4565: [Haoi2016]字符合并
BZOJ4565: [Haoi2016]字符合并区间Dp·状压Dp题解:又一道神题,蒟蒻orz由于合并的获利为正,所以一定会合并到不能合并为止。我们发现一个长度lenlen合并完的长度是已知的,length[i]=(i<m?i:length[i−m+1])length[i]=(i<m?i:length[i-m+1])设f[i][j][s]f[i][j][s]表示区间[i,j][i,j]最后变成ss的原创 2017-08-24 22:04:50 · 414 阅读 · 0 评论 -
BZOJ1264: [AHOI2006]基因匹配Match
BZOJ1264: [AHOI2006]基因匹配MatchDp·树状数组题解: http://www.cppblog.com/MatoNo1/archive/2011/03/19/142240.html?opt=adminLCS问题的朴素时间复杂度为O(NM)O(NM)。对于本题显然需要优化。 观察LCS的转移方程: F[i][j] = F[i-1][j-1]+1(当A[i]==B[j]时原创 2017-08-21 22:19:21 · 243 阅读 · 0 评论 -
BZOJ4145: [AMPPZ2014]The Prices
BZOJ4145: [AMPPZ2014]The Prices状压Dp题解: http://www.cnblogs.com/gromah/p/4592207.html我们考虑设立状态Dp[i][s]Dp[i][s]表示考虑了前ii个商店后,购买状态为ss的最小花费。转移的话就枚举每个商店ii,首先令: Dp[i][s]=Dp[i−1][s]+D[i]Dp[i][s]=Dp[i−1][s]+D原创 2017-08-21 22:28:25 · 303 阅读 · 0 评论 -
花园
花园状压dp + 矩阵 Luogu P1357题解:注意到M很小,因此可以状压dp。 然后用矩阵优化一下即可。 因为是环形的,所以要做N次幂,然后取首尾相接的。Code:#include <iostream>#include <cstdio>#include <cstring>#define D(x) cout<<#x<<" = "<<x<<" "#define E cout<<原创 2017-07-31 08:54:34 · 234 阅读 · 0 评论 -
BZOJ2118: 墨墨的等式
BZOJ2118: 墨墨的等式完全背包求可行方案数题解:http://blog.csdn.net/lych_cys/article/details/50804776核心思想:设其中最小的w是p,设d[i]表示总重量%p=i的最小重量。 放入一个重量为w的物品时,d[i]+w去更新d[(i+w)%p],最短路即可。另外p不取最小的w正确性没有影响,就是点数多了。Code:#include <iost原创 2017-09-04 12:00:25 · 267 阅读 · 0 评论 -
BZOJ4416: [Shoi2013]阶乘字符串
BZOJ4416: [Shoi2013]阶乘字符串状压dp题解:据说n>21n>21无解? 据说合法的串最短是O(n2)O(n^2)级别的? 不知道。。。对于n<=21n<=21的情况, 设f[S]f[S]表示原串的最短前缀的结束位置,这个前缀是以S为字符集合的阶乘字符串。 设g[i][x]g[i][x]表示在后缀[i+1,n][i+1,n]中x这个字符第一次出现的位置。枚举S中的字母x,f原创 2017-08-26 15:40:15 · 433 阅读 · 0 评论 -
BZOJ1076: [SCOI2008]奖励关
BZOJ1076: [SCOI2008]奖励关状压Dp题解: http://blog.csdn.net/PoPoQQQ/article/details/43454337对于这种最优策略的期望DP 我们一般都是从后往前推 枚举每次出现宝物 枚举此时的状态 枚举宝物是哪种 如果当前的宝物可以吃 就在吃与不吃的后继状态中选择最大值加到当前状态上 如果当前的宝物不能吃 只能选择不吃的后继状态加到原创 2017-08-23 13:17:10 · 300 阅读 · 0 评论 -
BZOJ1055: [HAOI2008]玩具取名
BZOJ1055: [HAOI2008]玩具取名区间Dp题解:设f[l][r][x]表示[l,r][l,r]区间能否变成xx这个字母。转移:枚举最后一次合并的划分点,枚举xx的每一种变形规则,看看左右两边是否都可以变成变形则需要的字母。Code:#include <iostream>#include <cstring>#include <cstdio>#include <vector>#in原创 2017-08-23 13:39:38 · 197 阅读 · 0 评论 -
BZOJ1415 聪聪和可可
BZOJ1415 聪聪和可可期望Dp题解:设f[i][j]f[i][j]表示聪聪在点i,可可在点j时的期望步数。i==j时,f[i][j]=0f[i][j]=0i按找要求走一步或两步能走到j时,f[i][j]=1f[i][j]=1否则: f[i][j]=f[i′][j]+1+∑(f[i′][j′]+1)du[j]+1 f[i][j]=\frac {f[i'][j]+1+\sum{(f[i原创 2017-08-23 13:36:49 · 278 阅读 · 0 评论