題目:
先設 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+1 個值,即可算出 x=a 的答案。
**如下:
#include#include#include
#include
using
namespace
std;
typedef
long
long
ll;int
const xn=505
;int n,a,mod,f[xn][xn<<1],yy[xn<<1
];int
rd()
while(ch>='
0'&&ch<='
9')ret=(ret<<3)+(ret<<1)+ch-'
0',ch=getchar();
return f?ret:-ret;
}int upt(int x)
int pw(ll a,int
b)int
main()
for(int i=1;i<=m;i++)yy[i]=f[n][i];
ll ans=0;
for(int i=1;i<=m;i++)
ans=(ans+s1*pw(s2,mod-2)%mod*yy[i]%mod)%mod;
}printf(
"%lld\n
",ans);
return0;
}
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 互不相等。乙個序列的值定義為它...
BZOJ2655 拉格朗日插值 calc
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...
拉格朗日插值與拉格朗日反演
模板 拉格朗日插值 拉格朗日插值法 f x sum limits 我們先把右邊那部分提出來看 ell x prod x x cdots x x cdots x 舉個例子吧 有二次函式上的三點 f 4 10,f 5 5.25,f 6 1 求 f 18 求出三個基本式 ell x ell x ell x...