• 整数划分


    划分为 k 个正整数

    (f_{i,j}) 为把 (i) 划分为 (j) 个数的方案数,得:

    [large f_{i,j}=f_{i-j,j} + f_{i-1,j-1} ]

    整体加 (1) 和新划分 (1)

    划分为不重复的 k 个正整数

    (f_{i,j}) 为把 (i) 划分为 (j) 个数的方案数,得:

    [large f_{i,j}=f_{i-j,j} + f_{i-j,j-1} ]

    整体加 (1) 和整体加 (1) 后再新划分 (1)

    划分为不大于 m 的不重复的 k 个正整数

    (f_{i,j}) 为把 (i) 划分为 (j) 个数的方案数,得:

    [large f_{i,j}=f_{i-j,j} + f_{i-j,j-1} - f_{i-(m+1),j-1} ]

    整体加 (1) 和整体加 (1) 后再新划分 (1)

    (i > m) 时减去后面一项,因为每个数不重复,所以每次转移最多有一个数大于 (m),变为 (m+1),需要减去其贡献。

    [HEOI2014]平衡

    划分为 k 个奇数

    (f_{i,j}) 为把 (i) 划分为 (j) 个奇数的方案数,(g_{i,j}) 为把 (i) 划分为 (j) 个偶数的方案数,得:

    [large egin{aligned} f_{i,j}&=g_{i-j,j}+f_{i-1,j-1} \ g_{i,j}&=f_{i-j,j} end{aligned} ]

    优化

    上面的 (DP) 直接做复杂度都是 (O(n^2)) 的,无法接受,考虑优化。

    划分为 k 个正整数

    分成两块([1,S-1],[S,n])来计算,最后用乘法原理统计答案。

    前一块用直接用完全背包求解。

    后一块中被划分的数大于等于 (S),所以原先的 (DP)(j) 只用枚举到 (frac{n}{S}),这里考虑到的最小的数也不再是 (1),而是 (S),于是方程变为:

    [large f_{i,j}=f_{i-j,j} + f_{i-S,j-1} ]

    复杂度为 (O(n(S+frac{n}{S})))(S=sqrt n) 时最优,复杂度为 (O(nsqrt n))

    划分为不重复的 k 个正整数

    (j) 个数的最小值为 (sumlimits_{k=1}^j k = frac{j(j+1)}{2} leqslant i),得 (j) 是根号级别的。

    五边形数

  • 相关阅读:
    使用JS实现图片轮播滚动跑马灯效果
    特殊字符和注释标签
    html常用标签总结
    html重点标签总结
    web常用开发工具
    标签分类和关系
    Web标准和骨架
    常用开浏览器内核
    常用浏览器介绍
    2019/08/20记
  • 原文地址:https://www.cnblogs.com/lhm-/p/13499402.html
Copyright © 2020-2023  润新知