BZOJ2655 拉格朗日插值 calc

2021-09-26 02:08:48 字數 1521 閱讀 2856

bzoj2655

考慮dp的話是f[i

][j]

=i∗f

[i−1

][j−

1]+f

[i−1

][j]

f[i][j]=i*f[i-1][j-1]+f[i-1][j]

f[i][j

]=i∗

f[i−

1][j

−1]+

f[i−

1][j

]分別表示選當前這個數和不選

然而i

ii很大,有1e9

發現每次轉移乘上的是乙個i

ii,且j+1

j+1j+

1,類似乙個字首和,所以i

ii的最高次項為2n2n

2n則dp出2n+

12n+1

2n+1

項做拉格朗日插值就完了

code:

#include

using

namespace std;

const

int rlen=

1<<21|

1;inline

chargc(

)inline

intread()

while

(isdigit

(ch)

)return res*f;

}int mod;

inline

void

file()

inline

intadd

(int x,

int y)

inline

intdec

(int x,

int y)

inline

intmul

(int x,

int y)

inline

void

inc(

int&x,

int y)

inline

void

dec(

int&x,

int y)

inline

void

mul(

int&x,

int y)

inline

intksm

(int a,

int b)

const

int n=

1005

;int n,a;

int dp[n]

[n];

int fac[n]

;inline

void

init()

}inline

intlagrange()

for(

int i=

1;i<=m+

1;i++

)mul

(res,

dec(a,i));

return res;

}int

main()

bzoj2655 calc 拉格朗日插值

description 乙個序列a1 an a1,an 是合法的,當且僅當 長度為給定的 n n a1 an role presentation style position relative a1,ana1 an都是 1,a 1,a 中的整數。a1 an a1,an 互不相等。乙個序列的值定義為它...

bzoj 2655 calc 拉格朗日插值

題目 先設 f i j 表示長度為 i 的序列,範圍是 1 j 的答案 則 f i j f i 1 j 1 i j f i j 1 分別是選不選 j,選 j 的話放在哪個位置 看不出次數.據說這是個最高次數為 2i 的多項式,感性理解.知道了次數,就可以用拉格朗日插值算了,dp得到比較小的 2 n ...

拉格朗日插值

拉格朗日插值基函式 li x x x 0 x xi 1 x xi 1 x x n x i x0 xi xi 1 xi xi 1 xi xn 拉格朗日差值函式 ln x i 0 nyil i x 其中,x為缺失值對應的下表序號,ln x 為缺失值的插值結果,xi 為缺失值yi 的下表序號。對全部缺失值...