【BZOJ】2655: calc 动态规划+拉格朗日插值
【題意】一個(gè)序列$a_1,...,a_n$合法當(dāng)且僅當(dāng)它們都是[1,A]中的數(shù)字且互不相同,一個(gè)序列的價(jià)值定義為數(shù)字的乘積,求所有序列的價(jià)值和。n<=500,A<=10^9,n+1<A<mod<=10^9,mod是素?cái)?shù)。
【算法】動(dòng)態(tài)規(guī)劃+拉格朗日插值
【題解】這道題每個(gè)數(shù)字的貢獻(xiàn)和序列選了的數(shù)字積關(guān)系密切,所以不能從序列角度考慮(和具體數(shù)字關(guān)系不大)。
設(shè)$f_{n,m}$表示前n個(gè)數(shù)字(值域)中取m個(gè)數(shù)字的答案,那么枚舉取或不取數(shù)字n,取n時(shí)乘n且有j個(gè)位置可以插入,即:
$$f_{i,j}=f_{i-1,j}+f_{i-1,j-1}*i*j$$
答案是$f_{A,n}$。這里最后再乘n!應(yīng)該也是可以的,但是就不能插值了233。
打表法找規(guī)律見(jiàn):【BZOJ2655】calc DP 數(shù)學(xué) 拉格朗日插值?by yww
觀察法:假裝正經(jīng)地觀察一下這個(gè)式子,下標(biāo)j從j-1轉(zhuǎn)移并乘上j,那么每次就多一個(gè)次數(shù)。但為什么最后要翻個(gè)倍就不是很清楚了。
不過(guò)拉格朗日插值插多了也沒(méi)關(guān)系,所以可以通過(guò)對(duì)拍嘗試小數(shù)據(jù)來(lái)試出最小插值。
復(fù)雜度O(n^2+n)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/onioncyc/p/8886225.html
總結(jié)
以上是生活随笔為你收集整理的【BZOJ】2655: calc 动态规划+拉格朗日插值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: opatch更新
- 下一篇: except的实践经验