DP

背包

多重背包 单调队列

  • ???

P4141

  • 退背包
  • 由暴力到优化
    • 每删一个, 做一次背包
      • n2m
    • 前后缀
      • F(i, j) 前 i 件, G(i, j) 第i - n 件
      • nm2
    • 退掉 i 物品
      • f(i,j)=f(i1,x)
      • f(j)=f(jwi)
  • 拓展:去掉 i , 求 max
    • 分治背包
    • 目的:除 i 以外的背包
    • 每次走哪边, 就把相反的一边加入(走左加右), 走到最底层, 就只有一个点没加进去, 达成目的

P2371

  • 背包做法
  • n 比较小, a 相比 l, r 较小
  • 凑出 x, 则 x+a1,x+2a1.... 都可以凑出来
    • j 通过 a_k 到 (j+ak)%a1, dp[(j+ak)%a1]=dp[j]+ak, 形似最短路

P8392

  • 重量很小, 数量, 个数都很大
  • 贪心能得到 < l 的最大个数
  • 贪心 + DP
    • 怎么调整 ???
    • 再跑一次多重背包

P4322

  • 暴力 dp(i,k,a)=b
    • 求 b 的最小值
  • 答案为 ans
    • ansa/b
    • 0(abans)
    • 二分 ans, 树形背包

区间DP

  • 倒着考虑
  • 最后一共一堆
    • 上一步是一个前缀和一个后缀合并
    • 都是区间合并
    • 枚举由哪两个区间合并

BZOJ 4380

  • [l, r] -> 找区间最小值 -> 全局最小值 :跨过全局最小值的花费为它

    • 剩下的分为两种:在他左边的, 右边的 -> 两个区间
    • 只有 f(l, r) 没法转移
      • 再记录一维最小值 k, f(l. r, k)
  • c 离散化

  • 枚举最小值的位置 p 和值 k

    • 枚举左右边的最小值(>= k) 复杂度太高
    • 对左右边最小值做前缀和,O(1) 转移
  • O(n3m)

  • 脑子里存着做法, 考试的时候试

AGC 26 D

  • h 全相等怎么做
    • 确定一行, 剩下的最多有两种填法
    • 确定最下面, 上面 01 反转 2n(2n,1)
    • 01 交替 2h
      • 重复的:010101..., 101010 (01反转)
  • 不全相等?
    • 最下面加上一行, 假设上面已知, 要求你填这一行 懒人思维法
    • 上面的
      • 01交替 || 空的:方案数*2
      • 否则不变
    • 上面的和第一行一样
    • dp(l, r, k, 0/1) 区间[l, r], 高为k, 是否01交替
  • O(nnhi2)
    • 但是有些 hi 用不到(h0 = 1, h1 = 10, h2 = 1)
    • 高出去的都可以跳掉(单独算)
  • 怎么分段?
    • hi 的最小值分成左右两部分
    • 用笛卡尔树

CF1372E

  • 假设上面的都填好了, 你要填最后一行
    • 往 1 多的列填
    • 枚举一列, 让所有的 1 在这一列
    • 分成左半部分, 右半部分的子问题
  • f(l, r) 表示区间[l, r] 的最优, 并且只考虑了(l <=u <= v <= l 的区间),u, v是题目中的区间两端点

P6563

  • 懒人:x 在 [l, r] 中, 还要多少代价
  • f(l, r) = min(max(f(l, k), f(k + 1, r) + ak))
  • 优化?
    • a 单调不降
    • 随着 k 的枚举, ak 越来越大, 代价可能越来越大(f单调性未知)
      • 拆开 max
      • k 增大, f(l, k) 增大, f(k + 1, r) 减小
      • f(l, r) 有一个前缀取f(k + 1, r), 一个后缀取 f(l, k), 有一个分界点(二分得到)
      • 后缀:f(l, k), ak都单增, 取结尾最大
      • 前缀:f(l, r) = min(f(k + 1, r) + ak) 同一个 r
        • 线段树
    • 7000 的点不能带 log
    • 泛化:单点修改, 区间 min, 只能 log
      • 什么时候区间min不带log -> 单调队列
    • ???

四边形不等式

  • f(i, j) = min(f(i, k - 1) + f(k, j) + w(i, j))
  • 如果w满足
    • 区间更小更优
    • 交叉优于包含
      • (见课件)
    • 性质:
      • (i, j) 的最优决策点是 k, 则(i, j + 1) 的 >= k
  • 如何w判断是否满足单调性 (PPT)
  • 在区间里暴力枚举决策点(PPT)

石子合并

  • 最小代价
    • 小区间代价小于大区间
    • 交叉优于包含(??)

决策单调性

  • 一维:二分队列 ???
  • 二维:暴力枚举

???

// 下午

Loj 6039

  • 暴力 f(i, j) 前 i 个, 体积为 j 的最大价值 O(nk)

  • 假设 c 相同

    • 贪心选价值大的
    • 同体积排个序, 从大到小选 O(nk)
    • f(i,j)=maxf(i1,jvk)+wk
    • 作用:改变转移式, 用来优化
  • 单调性

    • 考虑四边形不等式
    • 但是唯一的价值函数 w 是一维的
    • 转化:
      • wk=wjk,j
      • 跟长度有关,交叉优于包含
    • 为什么满足决策单调性?
  • 把一维函数改写成满足四边形不等式的函数

斜率优化

板子

  • 推导

    • f(i,j)=min(f(k,j1)+(sisk)2)+c

    • 假设 j < k 且 f(k) 优于 f(j)

    • f(j)+(sisj)2f(k)+(sisk)2

    • f(j)+sj=g(j)

    • g(j)2sisjg(k)2sisk

    • g(j)g(k)sjsk2si​ 类似于斜率的公式

    • 另一个

      • f(i)=min(f(k)+(sisk)2)+c)

      • f(k)+si2+sk22sisk

      • f(i)=min(f(k)+sk22sisk)+c+si2

      • f(i)=min(g(k)2sisk)+...

  • 然后??

  • 上/下凸包???

  • 好写的方法:向量判断

P3648

  • DP 顺序

    • 代价和分割顺序无关
  • 暴力 f(i,k)=max(f(j,k1)+(sisj)(snsi))

  • sisnsi2 && f(j)sjsn=g(j) && sisj

  • 设 j < k 且 k 优于 j

  • g(k)g(j)sksjsi

  • 看成点 (si,g(i))

  • si 单减, 上凸包

  • 判断凸包

    • 找三个点, 构成三角形

    • 斜率由正无穷减小

    • 上凸包

      image-20240219153319897

      image-20240219153447060

CF1175G

  • 暴力:f(i,k)=min(f(j,k1)+(ij)maxj+1,i)

  • 消掉 max

    • 单调栈
    • 分成一段一段, 段内 max 相同
  • f(j)+(ij)max​ max会变

  • 离线凸包 或 在线李超树

    • 有很多条函数, 维护他们他最大值 F(i)=max(f(i),g(i)...)
    • 最小值是上凸包, 最大值是下凸包
    • 合并凸包:启发式
  • 题解

CEOI 2017

  • 在端点相交 1 3 建了桥, 2 4就不能建桥
  • f(i)=min(f(j)+(hihj)2+si1sj
  • g(j)=hj2+f(j)sj
  • j < k 且 k 优于 j
    • g(k)g(j)2hi(hkhj) 但是 hkhj 正负未知,无法移项
  • 法二:
    • f(i)=min(f(j)+(hihj)2+si1sj
    • min 拆开
    • f(i)si1hi2=2hihj+f(j)+hj2sj
    • g(j)=f(j)+hj2sj
    • f(i) 尽可能小 -> 2hihk 变小
    • 2hihj -> 直线 kx
    • 最小值是上凸包, 李超树

wqs 二分

  • 解决的问题:恰好分为 k 段, 且该函数为凸函数

  • 解决办法:用直线切凸包, 不断改变斜率

  • 二分斜率

  • 描述 ‘切’

    • 过凸包上每一个点做一条该斜率的直线
    • 切点在 y 轴的截距最大/小(上/下凸包)
    • kx+bb/

板子

  • 段数越多, 答案越小
  • 下凸包
  • 最小化 f(x)kx
  • 实现???

P4383 往后重看

posted on   Bubble_e  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话



点击右上角即可分享
微信分享提示