zoukankan      html  css  js  c++  java
  • Noip前的大抱佛脚----动态规划

    动态规划

    序列DP

    有些问题:

    • 求长度为(l)的上升子序列个数

      形如一个值域的前缀和的形式,还要支持插入,所以可以用树状数组优化DP,(O(n^2logn))求解([BZOJ4361]isn)

    • 求最长上升子序列长度

      两种做法,前者拓展性更强

      • (f[i])表示到第(i)个位置的最长上升子序列长度,则(f[i]=max(f[j]+1),j<=i&&A[j]<A[i]),用值域树状数组优化前缀(max)即可

      • (f[i])表示最长上升子序列长度为(i)的最小结尾值,可以知道(f)是单调递增的。新加入一个数(x)时找到大于等于(x)的第一个位置(j)(f[j]=x),意思是长度为(j)的最长上升子序列可以在(j-1)的基础上接(x)而不是接(f[j]),同时对其他的(f)不影响。如果(x)大于了最大值,(f)往后加一位

        如果求的是不降子序列那找到严格大于(x)的位置即可

      关于最长上升子序列,有一个很神奇的性质:拥有双权值的序列,对其一维排序,对另一维做(LIS)答案相同

      这个性质仿佛并没有什么用.....证明:对某一维排序并不影响两个元素间的二维偏序关系

    • 序列为树的前序遍历,则为区间DP问题

    考虑方向:

    • 对区间DP
    • 对长度DP
    • 考虑倍增优化

    背包问题

    • 充分利用好题目条件,隐含着物品有无限制、不会超过(sqrt n)个等条件
    • 物品代价的整倍数,用同余系的单调队列优化

    状态压缩以及拆分数

    在点数很少的情况下可以进行状态压缩
    点如果是没有区别的,可以采用拆分数进行更大数据范围的操作,再组合计数即可

    (40)内的拆分数在(4W)以内

    期望概率DP

    马尔可夫过程

    大概就是说状态可以回退,自己可以转移给自己或者自己之前的状态,这就需要高斯消元了

    • [JLOI2012]时间流逝

    树上马尔可夫过程,(f[i]=Pf[fa]+(sum f[son])+1)

    需要高斯消元但是时间不够,介绍一种 (O(n))的树上高斯消元

    假设(f[i]=kf[fa]+b),然后依次可以推导出(f[i]=frac{P}{1-Asum k}f[fa]+frac{1+Asum b}{1-Asum k}),从而表示这个表示可行,然后对于每个点算(k)(b)就可以得到根的答案了

    一类生成树计数问题

    树的生成方式为:每次在当前的树的结构上随机选取一个点,在其下方挂上一个结点

    已经遇到的题目:

    • 问期望高度(10.17T2)

      (f[i][j])表示放了(i)个结点,高度不超过(j)的方案数,转移是(f[i][j]=f[k][j-1]+f[i-k][j]),表示为一棵树连到了另一棵树的根。最后除以阶乘即可。

    • 问期望(sum_{i=1}^{n}sum_{j=1}^{n}dis(i,j))(HAOI2018苹果树)

      考虑每一条边产生的贡献,枚举(i)点的(siz),然后乘上(1-i)的生成方式、(i)子树的生成方式、其他地方的生成方式、以及i子树内选择编号的方案数

    平方计数

    (sum a^2)

    • 如果(a)是到达某种状态的方案数,那么可以等价为求两种操作序列最后得到的状态相同的方案数(NOI2009管道取珠)
  • 相关阅读:
    简单工厂模式
    c# 接口属性继承
    web安全测试---跨站点脚本测试
    web安全测试---WebScarab工具介绍
    Appscan安全漏洞扫描使用(转)
    web安全测试---AppScan扫描工具(转)
    修改DB-LINK连接数方法
    LoadRunner 11破解方法
    数据库学习网站和linux学习网站
    关于误删表可在回收站中闪回
  • 原文地址:https://www.cnblogs.com/xzyxzy/p/9903887.html
Copyright © 2011-2022 走看看