BZOJ 3028: 食物 [生成函式 隔板法 | 廣義二項式定理]

Candy?發表於2017-05-03

3028: 食物

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 497  Solved: 331
[Submit][Status][Discuss]

Description

明明這次又要出去旅遊了,和上次不同的是,他這次要去宇宙探險!
我們暫且不討論他有多麼NC,他又幻想了他應該帶一些什麼東西。理所當然的,你當然要幫他計算攜帶N件物品的方案數。
他這次又準備帶一些受歡迎的食物,如:蜜桃多啦,雞塊啦,承德漢堡等等
當然,他又有一些稀奇古怪的限制:
每種食物的限制如下:
       承德漢堡:偶數個
       可樂:0個或1個
            雞腿:0個,1個或2個
            蜜桃多:奇數個
            雞塊:4的倍數個
            包子:0個,1個,2個或3個
       土豆片炒肉:不超過一個。
            麵包:3的倍數個
 
注意,這裡我們懶得考慮明明對於帶的食物該怎麼搭配著吃,也認為每種食物都是以‘個’為單位(反正是幻想嘛),只要總數加起來是N就算一種方案。因此,對於給出的N,你需要計算出方案數,並對10007取模。

生成函式係數方案數,次數選擇個數(不要漏掉不選 x0=1)
每個的生成函式乘起來得到x/(1-x)4
然後廣義二項式定理(並不知道該怎麼用)....變形x*(1+x+x2+x3+...),n次項係數就是把n個數分成4組每組可以為空,用隔板法,板子和數一起選兩個為板子
C(n+3,3)
乘x考慮係數變化,就是n--
[update:2017-05-03]
今天重新想了一下怎麼用廣義二項式定理做
最後是求$\frac{x}{(1-x)^4}$的n次項係數,就是$(1-x)^{-4}$的n-1次項係數
用廣義二項式定理展開,係數就是$\binom{-4}{n}(-x)^n$
n次項係數為 $ \binom{-4}{n} = \frac{ (n+1)(n+2)(n+3) }{3!} $
 
 
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=505,MOD=10007;
int n,a;
char s[N];
int main(){
    scanf("%s",s+1);
    n=strlen(s+1);
    for(int i=1;i<=n;i++) a=(a*10+s[i]-'0')%MOD;
    printf("%d",a*(a+1)%MOD*(a+2)%MOD*1668%MOD);
}

 

 
 
 
 
 
 

相關文章