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 的下表序號。對全部缺失值...