摘要:最短路 "原题链接" 以$1$为起点在正图上跑$SPFA$或$Dijkstra$,求出$dis1[x]$,表示从$1$到节点$x$的所有路径中,经过权值最小的节点的权值;再以$n$为起点在 反图 上跑$SPFA$或$Dijkstra$,求出$dis2[x]$,表示从$n$到节点$x$的所有路径中,经
阅读全文
摘要:二分答案+单源最短路 "POJ原题链接" "洛谷原题链接" 显然可以二分答案,检验$mid$可以使用最短路来解决。 将大于$mid$的边看成长度为$1$的边,说明要使用免费升级服务,否则长度为$0$边,即不需要占免费的资格。 然后就可以在上面跑最短路,如果$dis[n] k$说明该答案不可行,将答案
阅读全文
摘要:树状数组 "原题链接" 先说一个结(cai)论(xiang),当两个相同的元素之间有$x$个元素是成单的,那么一定要交换$x$次。 ~~然而我并不会证(举例子算吗)~~ 然后我们就可以考虑用树状数组来维护两个相同元素之间有多少元素成单。 我们可以直接一个指针扫过去,当遇到一个第一次出现的元素$x$时
阅读全文
摘要:一道记忆化搜索 "原题链接" 和着色方案很像,这里就不详细阐述,可以去我博客里的 "着色方案" 里看。 但要注意本题不一样的是同种面值的牌花色不同,所以在转移时还需要乘上同种面值的牌的个数。 cpp include include using namespace std; typedef unsig
阅读全文
摘要:一道记忆化搜索 "BZOJ原题链接" "洛谷原题链接" 发现对于能涂木块数量一样的颜色在本质上是一样的,所以可以直接压在一个状态,而这题的数据很小,直接暴力开$6$维。 定义$f[a][b][c][d][e][la]$,$a$表示能涂$1$个木块的颜色总数,$b$表示能涂$2$个木块的颜色总数,$c
阅读全文
摘要:一道$DP$ "原题链接" 发现只有$a,b,c$三种情况,所以直接初始化成三个$01$方阵,找最大子矩阵即可。 我是先初始化垂直上的高度,然后对每一行处理出每个点向左向右的最大延伸,并不断计算矩阵大小来更新答案。 因为不想开函数传数组,所以全写在主函数复制粘贴了三遍。。代码显得比较冗长。 cpp
阅读全文
摘要:一道单调队列优化$DP$ "BZOJ原题链接" "洛谷原题链接" 朴素的$DP$方程并不难想。 定义$f[i][j]$表示到第$i$天,手上持有$j$股时的最大收益。 转移方程可以分成四个部分。 1. 第$i$天为空手时买股票 $\qquad\qquad f[i][j]= AP_i\times j$
阅读全文
摘要:一道单调队列优化$DP$ "原题链接" 首先想到的应该是$O(n^3)$的朴素$DP$。 定义$f[i][j]$表示第$j\sim i$块干草堆作为顶层时的最大高度。 $\qquad\qquad f[i][j]=\max\limits_{k=1}^{j 1}\{f[j 1][k]\}+1,(sum[
阅读全文
摘要:一道需要用堆初始化的$DP$ "原题链接" 显然对于每一个部分,当$b[i]$为$a$对于部分的中位数时,差错最小。设$S(x,y)$表示$x\sim y$这一部分的差错。 $DP$的转移方程应该并不难推。 定义$f[i][j]$表示前$i$个数字分成$j$组导致的差错的最小值。 $\qquad\q
阅读全文
摘要:一道状压$DP$ "POJ原题链接" "洛谷原题链接" 很显然的状压,$1$表示种植,$0$表示荒废。 将输入直接进行状压,而要满足分配的草场是适合种草的土地,即是分配时的状态中的$1$,在输入对应的状态中也是$1$,而$0$对应$0,1$都可以。 设输入的这行状态为$a[i]$,分配时的这行状态为
阅读全文
摘要:一道计数类$DP$ "原题链接" 先用$DP$计算方案数,再枚举木板,并将$C$不断减去方案数,直到得出所求方案。 定义$f[i][j][k]$表示用$i$块木板构成栅栏,其中最左边的木板高度从小到大排在第$j$块,$k$表示这块木板是低位还是高位(低位为$0$,高位为$1$)。 $\qquad\q
阅读全文
摘要:一道计数类$DP$ "原题链接" 我们可以用$n$个节点能构成的无向图总数减去$n$个点能构成的不连通无向图的数量即可得到答案。 因为$n$个点之间最多能有$\dfrac{n\times(n 1)}{2}$条边,而每次选边构成无向图,对于每一条边只有选与不选两种,所以$n$个点能构成的无向图总数为$
阅读全文
摘要:一道计数类$DP$ "原题链接" 我们可以先计算从左上角到右下角总的路径,再减去经过黑色方格的路径即是答案。 总路径数可以用组合数直接计算:$C_{H+W 2}^{H 1}$ 因为从左上角到右下角必须走$H+W 2$步,而其中必须向右走$H 1$步,向下走$W 1$步,所以这就相当于是从$H+W 2
阅读全文
摘要:一道单调队列优化$DP$。 "原题链接" 设$f[i][j]$表示前$i$个工匠粉刷前$j$块木板(可以有不刷的木板)能获得的最大报酬。 1. 第$i$个工匠可以不刷第$j$块木板,此时$f[i][j]=f[i 1][j]$。 2. 第$j$块木板可以不刷,此时$f[i][j]=f[i][j 1]$
阅读全文
摘要:"原题链接" 第一眼还以为是贪心,然后随便找了几组例子瞬间推翻贪心的想法。发现$n\leqslant18$,显然是用爆搜+剪枝。 爆搜主体我是对小猫进行枚举,判断增添缆车,其实这是一个比较慢的搜法,而另一个更快的搜法是通过枚举缆车,这样只要剪一点枝即可过,而我用的方法则需要更多剪枝才可过。 1. 显
阅读全文