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 秒。輸入乙個詞所需的時間 為輸入每個字母所需時間之和。不過,如果小希之前練過這個詞,那麼所需的時間可以降為初次 輸入時的一半。小...