1. 程式人生 > >【HDU】4658 Integer Partition【生成函式——數拆分】

【HDU】4658 Integer Partition【生成函式——數拆分】

題目分析:

用了五邊形數定理以及生成函式,然而我看懂了生成函式怎麼搞這題卻不知道為啥生成函式是五邊形數形式= =

首先觀察下面的圖片:

五邊形數

很容易我們可以發現用這種方式構造N個五邊形(假設一個點也算一個五邊形),需要點的個數為:

n(3n1)2

接下來我們來看一下數拆分。
提問:將一個正整數N拆成不少於一個數的和,問有多少種方案。

很容易我們可以構造一個多項式:
P(x)=(1+x1+x2+...)(1+x2+x4+...)(1+x3+x6+...)...
=Px(0)x0+Px(1)x1+Px(2)x2+...+Px(n)xn

可以發現N的數拆分的方案數正對應著多項式展開後x

n的係數Px(n)

考慮如下等式:

(1+x1+x2+...)=11x
因此我們有:
i=011xi=i=0Px(i)xi
其中上式等式左邊是尤拉函式ϕ(x)的倒數。即:
1ϕ(x)=i=0Px(i)xi

尤拉函式ϕ(x)的展開式為:

ϕ(x)=(1x)(1x2)(1x3)...=1xx2+x5+x7x12x15+x22+x26...
其中的x的指數正對應著廣義五邊形數!
n 0 1 -1 2 -2 3 -3 4 -4
P(n) 0 1 2 5 7 12 15 22 26

現在我們要計算Px(n),由於1ϕ(x)=P(x),亦即ϕ(x)P(x)=1

(1xx2+x5+...)(Px(0)+Px(1)x+Px(2)x2+Px(3)x3+...)=1
所以:Px(n)=Px(n1)+P<