lqp在為出題而煩惱,他完全沒有頭緒,好煩啊… 他首先想到了整數拆分。整數拆分是個很有趣的問題。給你乙個正整數n,對於n的乙個整數拆分就是滿足任意m>0,a1 ,a2 ,a3…am>0,且a1+a2+a3+…+am=n的乙個有序集合。通過長時間的研究我們發現了計算對於n的整數拆分的總數有乙個很簡單的遞推式,但是因為這個遞推式實在太簡單了,如果出這樣的題目,大家會對比賽毫無興趣的。然後lqp又想到了斐波那契數。定義f0=0,f1=1,fn=fn-1+fn-2 (n>1),fn就是斐波那契數的第n項。但是求出第n項斐波那契數似乎也不怎麼困難… lqp為了增加選手們比賽的慾望,於是絞盡腦汁,想出了乙個有趣的整數拆分,我們暫且叫它:整數的lqp拆分。和一般的整數拆分一樣,整數的lqp拆分是滿足任意m>0,a1 ,a2 ,a3…am>0,且a1+a2+a3+…+am=n的乙個有序集合。但是整數的lqp拆分要求的不是拆分總數,相對更加困難一些。對於每個拆分,lqp定義這個拆分的權值fa1fa2…fam,他想知道對於所有的拆分,他們的權值之和是多少?簡單來說,就是求 由於這個數會十分大,lqp稍稍簡化了一下題目,只要輸出對於n的整數lqp拆分的權值和mod 109(10的9次方)+7輸出即可。
輸入的第一行包含乙個整數n。
輸出乙個整數,為對於n的整數lqp拆分的權值和mod 109(10的9次方)+7。35
【樣例說明】
f0=0,f1=1,f2=1,f3=2。
對於n=3,有這樣幾種lqp拆分:
3=1+1+1, 權值是1*1*1=1。
3=1+2,權值是1*2=2。
3=2+1,權值是2*1=2。
所以答案是1*1*1+1*2+2*1=5。
20%資料滿足:1≤n≤25 50%資料滿足:1≤n≤1000 100%資料滿足:1≤n≤1000000
給出兩種解法
母函式還不知道,先當逆元和組合數練習題
1 #include2 #include3 #include4 #include52.打表找規律:g[n]=2g[n-1]+g[n-2],g[0]=0,g[1]=1不過可以通過40分dp推導using
namespace
std;
6 typedef long
long
lol;
7int mod=1000000007
;8 lol ans,a[1000001],c[1000001];9
intn;
10 lol pow(lol x,int
y)11
19return
res;20}
21int
main()
22 35 cout<
36 }
暴力顯然有g[n]=σg[i]*f[n-i]+f[n],o(n^2)
bzoj2173 整數的lqp拆分
lqp在為出題而煩惱,他完全沒有頭緒,好煩啊 他首先想到了整數拆分。整數拆分是個很有趣的問題。給你乙個正整數n,對於n的乙個整數拆分就是滿足任意m 0,a1 a2 a3 am 0,且a1 a2 a3 am n的乙個有序集合。通過長時間的研究我們發現了計算對於n的整數拆分的總數有乙個很簡單的遞推式,但...
BZOJ2173 整數的lqp拆分(生成函式)
首先有序整數拆分有個顯然的遞推式是g n g i i 0 n 1 即列舉加入最後乙個數之前和是多少。雖然不用遞推式也能顯然地知道答案是2n 1 類似地,lqp拆分有遞推式f n f i fib n i i 0 n 1 由乘法分配律就可以推出。特別地,f 0 1。又是乙個卷積。是不是可以直接算了?啊要...
國家集訓隊 整數的lqp拆分
題面 題解見 注釋 或者我回來會放我在洛谷上寫的題解 設 g i 為i的lqp拆分的權值和,則 g i f j g i j f i 其中 g 0 0,g 1 1.以前是推式子推出來結果的,那麼今天就嘗試用生成函式做一下 設 a f i x i b g i x i 那麼 b a b a.解一下 b 發...