zoukankan      html  css  js  c++  java
  • CCF冬令营Day1上午

    可能只有这一讲的笔记了……QAQ

    二维区间DP

    听到名字就显然了,故略。

    四边形不等式

    讲解

    有一类常见DP问题,通常是区间DP,转移方程都是

    [large f_{i,j}=min{f_{i,k}+f_{k+1,j}+w_{i,j}} ]

    显然枚举 (i,j,k)(O(n^3)) 的,但是可以降低为 (O(n^2))

    (k:isim j) 改为 (k:c_{i,j-1}sim c_{i+1,j})。其中 (c_{i,j})(f_{i,j}) 的最优分割点。

    pic

    时间复杂度照例不会证明。

    但是要用这个优化,需要满足四边形不等式

    [large forall i<i'le j'< j,f_{i,j'}+f_{i',j}le f_{i,j}+f_{i',j'} ]

    例题:环形石子合并

    轮廓线

    例题

    用 1X2 和 2X1 的砖块填充 NXM 的棋盘,求方案数。

    数据范围:没看清

    pic

    状压DP。假设我们现在是5行6列。

    轮廓线上面的都填了, (k_{0sim 5}) 是否被覆盖用DP状态压缩。(就是轮廓线下面的那六个格子,注意顺序)

    现在我们要下压轮廓线

    判断 (x) 状态:

    1. (x) 没有砖块,那么 (k_5k_4k_3k_2k_1k_0 ightarrow k_4k_3k_2k_1k_00)

      f[now][(k<<1)&(~(1<<m))]+=f[old][k]

    2. (x) 放竖砖块,那么 (k_5k_4k_3k_2k_1k_0 ightarrow k_4k_3k_2k_11 1)

      f[now][(k<<1)^1]+=f[old][k]

    3. (x) 放横砖块,那么 (k_5k_4k_3k_2k_1k_0 ightarrow k_4k_3k_2k_1k_01)

      f[now][((k<<1)|3)&(~(1<<m))]+=f[old][k]

    状压实现。注意 (k) 总是轮廓线下方的格子。滚动数组。

    复杂度 (O(nm2^m)) 所以如果有题目 (n、m) 范围不一样,那么就考虑一下此算法。

    P.S. 现在开始讲单调队列DP和背包了????

    多重背包单调队列优化

    没听

    斜率优化

    假如有DP方程 (f_j=max{a_i imes b_j+f_i})

    (f_j=max{a_i imes b_j+f_i})

    先去掉 (max)(y=f_j,x=b_j,k=a_i,b=f_i)

    则变成了 (y=kx+b)

  • 相关阅读:
    zen_cart 支付提前生成订单
    SSL加密过程
    建立自己的代码库
    自动代码工具
    mssqlserver 学习资源
    自己动手写操作系统(1)
    Windows Phone 7 优秀开源项目收集
    正则表达式工具
    .net framework source code
    vs2012 打包应用程序(创建部署/安装包)
  • 原文地址:https://www.cnblogs.com/BlankAo/p/14356141.html
Copyright © 2011-2022 走看看