摘要: 轮廓线插头DP。 设$f[i][j][a][b][c][d][e]$表示考虑到了$(i,j)$,轮廓线上3个下插头的位置分别为$a,b,c$,是否有右插头,已经放了$e$个$L$的方案数。 然后直接DP即可。 时间复杂度$O(nm^4)$。   阅读全文
posted @ 2016-03-13 18:51 Claris 阅读(650) 评论(0) 推荐(1)
摘要: 将每个点拆成三个点,并将转移转化为矩阵乘法,然后倍增即可求出第$k$短路的长度,注意对爆long long情况的处理。 时间复杂度$O(n^3\log k)$。   阅读全文
posted @ 2016-03-13 02:35 Claris 阅读(743) 评论(0) 推荐(0)
摘要: 求出前缀和$s$,设$f[i]=s[i+d-1]-s[i-1]$。 从左到右枚举的右端点$i$,左端点$j$满足单调性,若$s[i]-s[j-1]-\max(区间内最大的f)\leq p$,则可行。 用单调队列维护即可,时间复杂度$O(n)$。   阅读全文
posted @ 2016-03-13 02:34 Claris 阅读(463) 评论(0) 推荐(0)
摘要: 首先只有一种字符的情况可以通过双指针在$O(n)$的时间内处理完毕。 设$cnt[i][j]$表示前$i$个字符中$j$字符出现的次数,那么对于两个位置$j<i$: 如果 $cnt[i][0]-cnt[j][0]\neq cnt[i][1]-cnt[j][1]$ $cnt[i][0]-cnt[j][ 阅读全文
posted @ 2016-03-13 02:33 Claris 阅读(756) 评论(0) 推荐(0)
摘要: 设$a$到$b$的边权为$c$的有向边的含义为$b\geq a+c$,则可以根据题意构造出一张有向图。 设$f[x]$为$x$点可行的最小值,$a[x]$为$x$位置已知的值,则$f[x]=\max(f[j]+w(j,i),a[x])$,其中$j$有边连向$i$。 通过拓扑排序+DP可以在$O(n) 阅读全文
posted @ 2016-03-13 02:31 Claris 阅读(696) 评论(1) 推荐(0)
摘要: 对于每种颜色,可以发现可以切的位置被分割成了若干段独立的区域。 给每个区域一个编号,将$m$种颜色的情况当成字符串来看,如果两个切口的字符串完全匹配,那么可以在这里切两刀。 可以构造hash函数,通过差分前缀和做到$O(n)$修改。 然后对于每一种相同的hash值,将切口按位置从小到大排序,通过组合 阅读全文
posted @ 2016-03-13 02:29 Claris 阅读(808) 评论(0) 推荐(0)
摘要: 设$lim=\sqrt{n}$。 若$k<lim$,预处理出: $F[i][x]$:$x$往上走$i$步到达的点。 $S[i][x]$:$x$不断往上走$i$步经过的点的和。 直接$O(1)$查询即可。 若$k\geq lim$: 查询时用树链剖分划分为$O(\log n)$条重链,在每条重链上暴力 阅读全文
posted @ 2016-03-13 02:28 Claris 阅读(661) 评论(3) 推荐(0)
摘要: 将$c$离散化,设: $f[i][j][k]$为区间$[i,j]$最小值为$k$的最大收益。 $g[i][j][k]$为$\max(g[i][j][k..m])$。 $h[i][j]$为对于当前DP区间,经过$i$点的,费用限制$\geq j$的人数。 然后直接DP即可,时间复杂度$O(n^3m)$ 阅读全文
posted @ 2016-03-13 02:26 Claris 阅读(1210) 评论(0) 推荐(1)
摘要: 两遍树形DP求出每个点开始往上往下走的前3长路以及每个点上下部分的直径。 枚举每条边断开,设两边直径分别为$A,B$,则: 对于第一问,连接两边直径的中点可得直径为$\max(A,B,\lfloor\frac{A+1}{2}\rfloor+\lfloor\frac{B+1}{2}\rfloor+1) 阅读全文
posted @ 2016-03-13 02:25 Claris 阅读(665) 评论(0) 推荐(0)
摘要: 对于每个询问,设不小于$s$的个数为$cnt$,小于$s$的和为$sum$。 那么如果可以进行$s$轮,当且仅当$sum\geq (c-cnt)\times s$。 权值线段树维护,时间复杂度$O(m\log m)$。 证明: 如果$cnt\geq c$,那么显然可以每次取$c$个。 否则如果$su 阅读全文
posted @ 2016-03-13 02:23 Claris 阅读(740) 评论(0) 推荐(0)