博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

随笔分类 -  动态规划——优化

摘要:"题目链接" 设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 阅读全文
posted @ 2018-03-08 14:48 SovietPower 阅读(206) 评论(0) 推荐(0)
摘要:"题目链接" 比较容易想到用f[i][j]表示走了i步后到达j点的方案数,但是题目要求不能走上一条走过的边 如果这样表示是不好转移的 可以考虑边,f[i][j]表示走了i步后到达第j条边的方案数,那么有 f[i][j] = ∑f[i 1][k] (边k能直接到达边j) 只要不走反向边,就保证了不会走 阅读全文
posted @ 2018-03-04 20:39 SovietPower 阅读(196) 评论(0) 推荐(0)
摘要:"题目链接" $Description$ 一条直线上有n个村庄,位置各不相同。选择p个村庄建邮局,求每个村庄到最近邮局的距离之和的最小值。 $Solution$ 先考虑在$[l,r]$建一个邮局,最优解肯定是建在中间。 这样$mid$两边对称,距离和是最小的;若建在$mid 1$,(假设$mid$与 阅读全文
posted @ 2018-02-22 20:31 SovietPower 阅读(190) 评论(0) 推荐(0)
摘要:给出平面上的$n$个点,满足$X_i$严格单增,$Y_i$严格单减。以$x$轴和$y$轴正方向作边,使这$n$个点构成一棵树,最小化树边边的总长。 阅读全文
posted @ 2018-02-22 17:28 SovietPower 阅读(275) 评论(0) 推荐(0)
摘要:"题目链接" (卡常背包) 朴素的多重背包是: $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]+ 阅读全文
posted @ 2018-02-22 16:35 SovietPower 阅读(358) 评论(0) 推荐(0)
摘要:"题目链接" cpp / 任意组合土地好像很难DP 对于同一组,价值为max{ai} max{bi},显然长宽都小于这个的土地是不会算入结果的 由于是都买,所以所有会被包含的土地都不会算入结果 先按Ai、Bi升序排序,第一关键字Ai,那么对于B[i 1] include include define 阅读全文
posted @ 2018-02-09 12:47 SovietPower 阅读(150) 评论(0) 推荐(0)
摘要:题目链接 \(Solution\) 注: 刚学 可能过程有疏漏,仅供参考(其实我不是很懂这里是否需要证决策单调)。 (当然不用斜率表示用推式子的方法解已经不太合适了。。) 抽象下问题,即将一个序列分成任意多段,设$f[i]$表示以$i$作为一个右端点时$[1,i]$的最小值,则$f[r]=f[l]+ 阅读全文
posted @ 2018-02-08 09:19 SovietPower 阅读(160) 评论(0) 推荐(0)
摘要:"题目链接" 斜率优化 不说了 网上很多 这的比较详细 " Click Here " or "Here" 阅读全文
posted @ 2018-02-07 18:03 SovietPower 阅读(178) 评论(2) 推荐(0)
摘要:"题目链接" $Description$ 给定一个$n$个数的序列,最多将序列分为$m+1$段,每段的价值是这段中所有数两两相乘的和。求最小总价值。 $Solution$ ~~写到这突然懒得写了。。~~ 丢个 "题解" ~~走人~~ cpp / 朴素O(n^3):f[i][j]表示当前在i分了j段的 阅读全文
posted @ 2018-02-07 17:22 SovietPower 阅读(160) 评论(0) 推荐(0)