bzoj2173 整數的lqp拆分

2022-05-12 12:05:57 字數 1886 閱讀 8900

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 #include5

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 }

2.打表找規律:g[n]=2g[n-1]+g[n-2],g[0]=0,g[1]=1不過可以通過40分dp推導

暴力顯然有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 發...