zoukankan      html  css  js  c++  java
  • 牛客Wannafly挑战赛28D msc的背包 背包、生成函数、组合

    传送门


    发现这是一个背包问题,而(k)又很大,考虑生成函数方式解决这个问题。

    对于体积为(1)的物品的生成函数为(frac{1}{1 - x}),体积为(2)的物品的生成函数为(frac{1}{1 - x^2}),那么我们要求的就是([x^k](frac{1}{1-x})^n (frac{1}{1-x^2})^m)

    ((frac{1}{1-x})^n = (frac{1}{1-x^2})^n imes (1 + x)^n),所以原生成函数等于((frac{1}{1 - x^2})^{n+m}(1+x)^n)

    注意到后面一部分((1+x)^n)只有(n+1)项。我们枚举((1+x)^n)(x^i)项对答案产生的贡献,那么我们需要求出([x^i](1+x)^n)([x^{k-i}](frac{1}{1-x^2})^{n+m})。前者由二项式定理可得为(inom{n}{i}),后者可以发现相当于有(n+m)个容量为(2)、数量无限的物品,要从中取出(frac{k - i}{2})个物品的本质不同的方案数。这个问题是经典的插板模型,不难得到后者为([2 mid (k-i)] inom{frac{k-i}{2} + n + m - 1}{n + m - 1})

    那么我们需要求的就是(sumlimits_{i=0}^n inom{n}{i}[2 mid (k-i)] inom{frac{k-i}{2} + n + m - 1}{n + m - 1})。因为(frac{inom{n}{i+1}}{inom{n}{i}} = frac{n-i}{i+1})(frac{inom{n}{i}}{inom{n-1}{i}} = frac{n}{n-i}),所以可以从小到大枚举(i)的过程中动态维护这两个组合数。

    代码

  • 相关阅读:
    web框架本质及第一个Django实例
    jQuery练习题HTML文件
    jQuery快速入门
    前端之JS
    前端基础之HTML
    前端基础之css
    并发编程之 协程
    Linux目录结构详解
    第三周 time库
    网络打印机拒绝访问,无法连接处理方法汇总
  • 原文地址:https://www.cnblogs.com/Itst/p/10753216.html
Copyright © 2011-2022 走看看