随笔分类 - 基础算法 -- 动态规划
摘要:【BZOJ1489】[HNOI2009]双递增序列(动态规划) 题面 "BZOJ" "洛谷" 题解 这$dp$奇奇怪怪的,设$f[i][j]$表示前$i$个数中,第一个数列选了$j$个数,第二个数列的最大值的最小情况。 那么转移如下,如果$a_i a_{i 1}$,那么可以直接接在第一个序列后面,$
阅读全文
摘要:【BZOJ1487】[HNOI2009]无归岛(动态规划) 题面 "BZOJ" "洛谷" 题解 哪来的这么多废话啊,直接说一个仙人掌得了。 然后就是要你求仙人掌最大独立集了。(随便蒯份原来的代码就过了) 不过我还是重新整理一遍思路吧。 一种是裸的$dp$,只需要额外考虑上环的影响就好了。 这种方法我
阅读全文
摘要:【BZOJ1413】[ZJOI2009]取石子游戏(博弈论,动态规划) 题面 "BZOJ" "洛谷" 题解 神仙题.jpg。$ZJOI$是真的神仙。 发现$SG$函数等东西完全找不到规律,无奈只能翻题解。 首先设$L[i][j]$表示在$[i,j]$这一段区间的左侧放上一堆数量为$L[i][j]$的
阅读全文
摘要:【BZOJ1304】[CQOI2009]叶子的染色(动态规划) 题面 "BZOJ" "洛谷" 题解 很简单。 设$f[i][0/1/2]$表示以$i$为根的子树中,还有颜色为$0/1/2$($2$就是没有染色)的叶子节点的路径上没有任何一个染色的点。随便转移一下就好了。 cpp include in
阅读全文
摘要:【BZOJ1297】[SCOI2009]迷路(矩阵快速幂) 题面 "BZOJ" "洛谷" 题解 因为边权最大为$9$,所以记录往前记录$9$个单位时间前的、到达每个点的方案数就好了,那么矩阵大小就是$10 n$的(似乎只要$9 n$)。构建转移矩阵之后直接矩阵快速幂即可。 cpp include i
阅读全文
摘要:【BZOJ1296】[SCOI2009]粉刷匠(动态规划) 题面 "BZOJ" "洛谷" 题解 一眼题吧。 对于每个串做一次$dp$,求出这个串刷若干次次能够达到的最大值,然后背包合并所有的结果即可。 cpp include include include using namespace std;
阅读全文
摘要:【BZOJ1294】[SCOI2009]围豆豆(动态规划,状压) 题面 "BZOJ" "洛谷" 题解 首先考虑如何判断一个点是否在一个多边形内(不一定是凸的),我们从这个点开始,朝着一个方向画一条射线,看看它和这个多边形的变相交了几次,如果是奇数次那么一定在这个多边形内,否则不在。 这个可以感性理解
阅读全文
摘要:【BZOJ1205】[HNOI2005]星际贸易(动态规划) 题面 "BZOJ" "洛谷" 题解 第一问就是一个裸$dp$,因为什么都不用考虑。。。 所以设$f[i][j]$表示当前停靠在第$i$个星球,已经卖了$j$吨货的最大收益。 反正只需要最大收益,在每个地方都停下去维护就好了。无解什么的直接
阅读全文
摘要:【BZOJ1966】[AHOI2005]病毒检测(动态规划) 题面 "BZOJ" "洛谷" 题解 我就蒯了一份代码随便改了改怎么就过了??? "从这道题目蒯的" 代码: cpp include include include include include include using namespa
阅读全文
摘要:【BZOJ1898】[ZJOI2005]沼泽鳄鱼(矩阵快速幂,动态规划) 题面 "BZOJ" "洛谷" 题解 ~~先吐槽,说好了的鳄鱼呢,题面里面全是食人鱼~~ 看到数据范围一眼想到矩乘。 先不考虑食人鱼的问题,直接设$f[i][j]$表示$j$时刻到达了$i$号节点的方案数,转移显然。 接下来考虑
阅读全文
摘要:【BZOJ1093】[ZJOI2007]最大半联通子图(Tarjan,动态规划) 题面 "BZOJ" "洛谷" 洛谷的讨论里面有一个好看得多的题面 题解 显然强连通分量对于题目是没有任何影响的,直接缩点就好了。 那么接下来剩下的是一个$DAG$,既然任意两点之间都有一条路径连接,在$DAG$上的体现
阅读全文
摘要:【BZOJ1090】[SCOI2003]字符串折叠(动态规划) 题面 "BZOJ" "洛谷" 题解 区间$dp$。设$f[i][j]$表示压缩$[i,j]$区间的最小长度。显然可以枚举端点转移。再考虑这一段区间能否压缩,暴力枚举一个压缩后的串长,判断是否全部相等即可。判相等不如用哈希,方便得多。 c
阅读全文
摘要:【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划) 题面 "BZOJ" "洛谷" 题解 设$f[i]$表示深度为$i$的$n$元树个数。然后我们每次加入一个根节点,然后枚举它的子树的深度乘起来就好了。但是这样不好做,我们设$f[i]$表示深度至多为$i$的$n$元树个数,那么显然
阅读全文
摘要:【BZOJ1055】[HAOI2008]玩具取名(动态规划) 题面 "BZOJ" "洛谷" 题解 裸的区间$dp$,设$f[i][j][W/I/N/G]$表示区间$[i,j]$能否由某个字母替换过来,转移的时候枚举用哪一个变换即可。 cpp include include include inclu
阅读全文
摘要:【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划) 题面 "BZOJ" "洛谷" 题解 直接一个单调队列维护一下没给点和它前面的$n$个位置的最大值,再用一次单调队列维护连续$n$列的,每个数和前面$n$个数的最大值,最小值同理,就做完了。 cpp include inclu
阅读全文
摘要:【BZOJ1037】[ZJOI2008]生日聚会(动态规划) 题面 "BZOJ" "洛谷" 题解 假设前面的都合法,但是在加完当前的最后一个人之后变得不合法了,那么意味着一定有着一个后缀不合法。把男生看成$1$,女生看成$ 1$,也就是不存在一个后缀和大于$K$或者一个后缀和小于$ K$。而在最后面
阅读全文
摘要:【BZOJ1032】[JSOI2007]祖玛(动态规划) 题面 "BZOJ" "洛谷" 题解 听说是道假题,假的原因是因为出题人可能没有考虑到祖玛的骚套路,比如可以先打几个球进去再一波消掉。也就是出题人基本默认了打一个球就至少要消去一段。 我们就这么做,那么就是个区间$dp$模板题了。 cpp in
阅读全文
摘要:【BZOJ1025】[SCOI2009]游戏(动态规划) 题面 "BZOJ" "洛谷" 题解 显然就是一个个的置换,那么所谓的行数就是所有循环的大小的$lcm+1$。 问题等价于把$n$拆分成若干个数,他们的$lcm$有多少种不同的情况。那么显然还可以变成有多少个数的$\sum_{i}p_i^{a_
阅读全文
摘要:【BZOJ1021】[SHOI2008]循环的债务(动态规划) 题面 "BZOJ" "洛谷" 题解 感觉以前的题目都好小清新啊,我这种智商丢失的选手完全写不动。 这题看着就像一个$dp$,并且我们发现每种币值之间是独立的,而且起始状态和终止状态同样已知。 设$f[i][j][k]$表示只交换前$i$
阅读全文
摘要:【BZOJ1017】[JSOI2008]魔兽地图(动态规划) 题面 "BZOJ" "洛谷" 题解 状态设一下,$f[i][j][k]$表示第$i$个物品,有$j$个用于合成,总花费为$k$的最大力量,转移什么的,乱死了,复杂度感觉好假。 cpp include include include inc
阅读全文