随笔分类 - 动态规划——优化
摘要:"题目链接" 设f[i][j]为当前是第i位考号、现在匹配到第j位(已有j 1位和A[]匹配)的方案数 因为假如当前匹配j位,如果选择的下一位与A[j+1]不同,那么新的匹配位数是fail[j]而不是0,那么设由匹配j位转移到匹配k位的方案数为t[j][k] 那么 $f[i][j] = ∑f[i 1
阅读全文
摘要:"题目链接" 比较容易想到用f[i][j]表示走了i步后到达j点的方案数,但是题目要求不能走上一条走过的边 如果这样表示是不好转移的 可以考虑边,f[i][j]表示走了i步后到达第j条边的方案数,那么有 f[i][j] = ∑f[i 1][k] (边k能直接到达边j) 只要不走反向边,就保证了不会走
阅读全文
摘要:"题目链接" $Description$ 一条直线上有n个村庄,位置各不相同。选择p个村庄建邮局,求每个村庄到最近邮局的距离之和的最小值。 $Solution$ 先考虑在$[l,r]$建一个邮局,最优解肯定是建在中间。 这样$mid$两边对称,距离和是最小的;若建在$mid 1$,(假设$mid$与
阅读全文
摘要:给出平面上的$n$个点,满足$X_i$严格单增,$Y_i$严格单减。以$x$轴和$y$轴正方向作边,使这$n$个点构成一棵树,最小化树边边的总长。
阅读全文
摘要:"题目链接" (卡常背包) 朴素的多重背包是: $f[i][j] = \max\{ f[i 1][j k v[i]]+k w[i] \}$,复杂度 $O(nV \sum num_i)$ 可以发现求$\max$时有很多值是被重复枚举过的 换一种方程表示形式,对于每个$v[i]$,设$j=K v[i]+
阅读全文
摘要:"题目链接" cpp / 任意组合土地好像很难DP 对于同一组,价值为max{ai} max{bi},显然长宽都小于这个的土地是不会算入结果的 由于是都买,所以所有会被包含的土地都不会算入结果 先按Ai、Bi升序排序,第一关键字Ai,那么对于B[i 1] include include define
阅读全文
摘要:题目链接 \(Solution\) 注: 刚学 可能过程有疏漏,仅供参考(其实我不是很懂这里是否需要证决策单调)。 (当然不用斜率表示用推式子的方法解已经不太合适了。。) 抽象下问题,即将一个序列分成任意多段,设$f[i]$表示以$i$作为一个右端点时$[1,i]$的最小值,则$f[r]=f[l]+
阅读全文
摘要:"题目链接" 斜率优化 不说了 网上很多 这的比较详细 " Click Here " or "Here"
阅读全文
摘要:"题目链接" $Description$ 给定一个$n$个数的序列,最多将序列分为$m+1$段,每段的价值是这段中所有数两两相乘的和。求最小总价值。 $Solution$ ~~写到这突然懒得写了。。~~ 丢个 "题解" ~~走人~~ cpp / 朴素O(n^3):f[i][j]表示当前在i分了j段的
阅读全文

浙公网安备 33010602011771号