生成函式小練

2021-08-19 07:40:53 字數 1926 閱讀 5218

hdu1028 ignatius and the princess iii

求將n拆分成若干整數的方案數。

我們依然考慮用生成函式x^n的係數表示選取的方案數,那麼生成函式的每乙個乘項的每一項的次方數就代表這個數字是幾。我們考慮對於每乙個數字,他可以構成的數作為數列建立生成函式,可以列出柿子 (1

+x+x

2+x3

+...

)(1+

x2+x

4+..

.)(1

+x3+

x6+x

9+..

.)..

. (1+

x+x2

+x3+

...)

(1+x

2+x4

+...

)(1+

x3+x

6+x9

+...

)...

這個東西即使化簡了也是很難算的,多項式乘法fft,n這麼小直接暴力o(n^3)啊

#include 

using

namespace

std;

int a[500],b[500],n;

int main()

printf("%d\n",a[n]);

}}

hdu1398 square coins

求將n劃分成若干個完全平方數的方案數。

hdu1085 holding bin-laden captive!

有a個1,b個2,c個5,問最小的無法組合出的數。

看到題面的我就是一激靈,noip的**。。

這個生成函式是個有限數列了 (1

+x+x

2+..

.+xa

)(1+

x2+x

4+..

.+x2

b)(1

+x5+

x10+.

..+x

5c) (1+

x+x2

+...

+xa)

(1+x

2+x4

+...

+x2b

)(1+

x5+x

10+..

.+x5

c)

那麼我們o(n^2)暴力展開看看哪個係數是0就好了

hdu1171 big event in hdu

有n種東西,每乙個的權值為v,有m個。將這些東西分成兩撥,讓權值和盡量接近。

我們根據套路列出柿子,指數是價值,數列是這個價值可以湊出的數 (1

+xv1

+x2v

1+..

.+xm

1v1)

(1+x

v2+x

2v2+

...+

xm2v

2)..

. (1+

xv1+

x2v1

+...

+xm1

v1)(

1+xv

2+x2

v2+.

..+x

m2v2

)...

然後求出係數之後從總價值/2開始找,距中點最近的且係數不為0的價值

事實上只需要執行到總價值/2的位置就好了,時間複雜度o(n m sum)

但是因為sum是一點點累加的所以並不會t?!

#include 

#include

#include

using

namespace

std;

int a[300000],b[300000];

int main()

for (int i=sum/2;i>=0;i--)

if (a[i])

}}

數字dp小練

我是超連結 題意 找0 n中含有 49 的個數 題解 狀態 f i j 表示i位數以j開頭的數中不含49的個數 轉移 if j 4 k 9 f i j f i 1 k 不含49,最後用總數減去不含的就是含有的 因為資料n 1怕爆longlong,手動 1 include include define...

區間dp小練

提綱 區間dp一般設計f i j 表示區間i到j的dp值,用幾段小的合併成一段整體,也是分治的思想,轉移時列舉中間點k,從f i k f k 1 j 來合併 1.題目 題解 石子歸併 水題開頭 include include include using namespace std int n,a 1...

小希練打字

問題描述 當小希輸入乙個詞時,他需要花0.2 秒輸入第乙個字母。而對於接下來的每個字母,如果在標 準指法下和前乙個字母使用同側手輸入,則需要 0.4 秒 否則只需 0.2 秒。輸入乙個詞所需的時間 為輸入每個字母所需時間之和。不過,如果小希之前練過這個詞,那麼所需的時間可以降為初次 輸入時的一半。小...