bzoj 3028: 食物 生成函数

不管怎么求似乎都不太好求,我们试试生成函数.
这个东西好神奇.
生成函数的精华是两个生成函数相乘,对应 $x^{i}$ 前的系数表示取 $i$ 个时的方案数.
有时候,我们会将函数按等比数列求和公式进行压缩,这样会更方便.
首先,将所有物品的生成函数都列出来,发现所有式子的乘积为 $\frac{x}{(x-4)^{n}}$
即 $x\times$$\frac{1}{(1-x)^4}$.
依据麦克劳林展开,$\frac{1}{(1-x)^n}$的展开为 $\sum_{i=0}^{\infty}C_{n+i-1}^{n-1}x^i$.
再乘一个 $x$,并将 $n=4$ 带入,得 $\sum_{i=0}^{\infty}C_{2+i}^{3}x^i$
答案即为 $C_{2+n}^{3}$,真是壮观.

Code:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream> 
#define ll long long 
#define mod 10007
using namespace std; 
int main(){
    int n=0; char c;
    while(cin>>c) n*=10,n%=mod,n+=c-'0',n%=mod;     
    cout << ((((long long)n*(n+2)*(n+1))%mod)*1668)%mod; 
    return 0; 
}

  

posted @ 2019-04-20 15:12  EM-LGH  阅读(235)  评论(0编辑  收藏  举报