3028: 食物
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 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+...)4 ,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); }