bzoj2173 整數的lqp拆分

2022-05-30 21:00:18 字數 1870 閱讀 7022

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。

3
5
20%資料滿足:1≤n≤25 50%資料滿足:1≤n≤1000 100%資料滿足:1≤n≤1000000

貌似並不需要生成函式啊...為啥好像題解都是生成函式..

設\(a_n\)表示\(n\)的拆分的答案,列舉拆分的最後乙個位置放什麼,可得:

\[a_n=\sum_^a_f_

\]然後根據斐波那契數列的性質:

\[f_=f_+f_

\]那麼注意到\(f_\)可以拆分,可得:

\[\begin

a_n&=\sum_^a_f_\\

&=\sum_^a_f_+a_\\

&=\sum_^a_if_+\sum_^a_if_+a_\\

\end

\]注意到:

\[\begin

a_&=\sum_^a_f_\\

a_&=\sum_^a_f_\\

\end

\]帶入可得:

\[\begin

a_n&=\sum_^a_if_+\sum_^a_if_+a_+a_f_\\

&=2a_+a_

\end

\]由於\(n\leqslant1e6\),暴算就行了。

update on 19.5.14:

今天偶然看到這個題,發現其實生成函式做這個題很簡單:

這題給出來的是個揹包,所以答案就是:

\[[x^n]\sum_^f^i(x)=\frac

\]左邊是列舉放了多少個,\(f(x)\)是斐波那契數列的冪級數。

眾所周知斐波那契的生成函式是這樣的:

\[\begin

f(x)&=x^2f(x)+xf(x)+x\\f(x)&=\frac

\end

\]帶入可得答案為:

\[[x^n]g(x)=[x^n]\frac

\]展開就是:

\[g(x)=2xg(x)+x^2g(x)+x

\]可以得到上面的遞推式。

#includeusing namespace std;

void read(int &x)

void print(int x)

void write(int x)

const int maxn = 1e6+2;

const int mod = 1e9+7;

int f[maxn];

int main()

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 發...