1. 程式人生 > >【BZOJ】2655: calc 動態規劃+拉格朗日插值

【BZOJ】2655: calc 動態規劃+拉格朗日插值

size HR spa 數據 下標 轉移 一個 動態規劃 找規律

【題意】一個序列$a_1,...,a_n$合法當且僅當它們都是[1,A]中的數字且互不相同,一個序列的價值定義為數字的乘積,求所有序列的價值和。n<=500,A<=10^9,n+1<A<mod<=10^9,mod是素數。

【算法】動態規劃+拉格朗日插值

【題解】這道題每個數字的貢獻和序列選了的數字積關系密切,所以不能從序列角度考慮(和具體數字關系不大)。

設$f_{n,m}$表示前n個數字(值域)中取m個數字的答案,那麽枚舉取或不取數字n,取n時乘n且有j個位置可以插入,即:

$$f_{i,j}=f_{i-1,j}+f_{i-1,j-1}*i*j$$

答案是$f_{A,n}$。這裏最後再乘n!應該也是可以的,但是就不能插值了233。

打表法找規律見:【BZOJ2655】calc DP 數學 拉格朗日插值 by yww

觀察法:假裝正經地觀察一下這個式子,下標j從j-1轉移並乘上j,那麽每次就多一個次數。但為什麽最後要翻個倍就不是很清楚了。

不過拉格朗日插值插多了也沒關系,所以可以通過對拍嘗試小數據來試出最小插值。

復雜度O(n^2+n)。

【BZOJ】2655: calc 動態規劃+拉格朗日插值