【XSY2536】【BZOJ2655】calc DP 数学 拉格朗日插值
2017-08-16 09:51
218 查看
题目大意
一个序列a1,…,an是合法的,当且仅当: 长度为给定的n。
a1,…,an都是[1,m]中的整数。
a1,…,an互不相等。
一个序列的值定义为它里面所有数的乘积,即a1×a2×⋯×an。
求所有不同合法序列的值的和。
两个序列不同当且仅当他们任意一位不一样。
输出答案对一个数p取余的结果。
n≤500,m≤109,p≤109,n+1<m<p且p是质数。
题解
这题做法很多种。 设fi,j为前i个数中选j个数的所有方案的值的和,容易得到递推式:f0,0=1,fi,j=fi−1,j−1×i×j+fi−1,j。最后ans=fm,n。但是这题m很大,不能直接求出答案。怎么办呢?
我们先打个表:
f | 0 | 1 | 2 |
---|---|---|---|
0 | 1 | 0 | 0 |
1 | 1 | 1 | 0 |
2 | 1 | 3 | 4 |
3 | 1 | 6 | 22 |
4 | 1 | 10 | 70 |
5 | 1 | 15 | 170 |
6 | 1 | 21 | 350 |
f | 0 | 1 | 2 |
---|---|---|---|
0 | 1 | 0 | 0 |
1 | 1 | i | 0 |
2 | 1 | 2i−1 | 2i2−2i |
3 | 1 | 3i−3 | 6i2−12i+4 |
4 | 1 | 4i−6 | 12i2−36i+22 |
5 | 1 | 5i−10 | 20i2−80i+70 |
6 | 1 | 6i−15 | 30i2−150i+170 |
这道题因为是求某一个点的值,并不要求求出多项式,而且x取的是[0,2n],所以可以O(n)求出答案。然而并没有什么用,因为前面的DP已经是O(n2)的了。
时间复杂度:O(n2)
代码
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<ctime> #include<utility> using namespace std; typedef long long ll; typedef pair<int,int> pii; ll p; ll f[1010][1010]; ll fp(ll a,ll b) { ll s=1; while(b) { if(b&1) s=s*a%p; a=a*a%p; b>>=1; } return s; } int main() { int n,m; scanf("%d%d%lld",&m,&n,&p); int i,j; memset(f,0,sizeof f); f[0][0]=1; for(i=1;i<=2*n;i++) { f[i][0]=f[i-1][0]; for(j=1;j<=n;j++) f[i][j]=(f[i-1][j-1]*i%p*j+f[i-1][j])%p; } if(m<=2*n) { printf("%lld\n",f[m] ); return 0; } ll ans=0; for(i=0;i<=2*n;i++) { ll s1=1,s2=1; for(j=0;j<=2*n;j++) if(j!=i) { s1=(s1*(m-j))%p; s2=(s2*(i-j))%p; } ans=(ans+f[i] *s1%p*fp(s2,p-2)%p)%p; } ans=(ans%p+p)%p; printf("%lld\n",ans); return 0; }
相关文章推荐
- bzoj2655 calc [拉格朗日插值]
- bzoj千题计划269:bzoj2655: calc (拉格朗日插值)
- bzoj 2655: calc dp+拉格朗日插值法
- [BZOJ2655] calc - 拉格朗日插值,dp
- 【BZOJ】2655: calc 动态规划+拉格朗日插值
- 【bzoj 4173】数学
- [组合数学 思路题] BZOJ 4402 Claris的剑
- [BZOJ2742][HEOI2012]Akai的数学作业(数学)
- Bzoj2655 calc
- 【BZOJ3326】数数 数学题
- BZOJ 3997 TJOI2015 组合数学
- [bzoj5020][THUWC 2017]在美妙的数学王国中畅游
- BZOJ 2142 礼物 组合数学+数论
- 【bzoj 十连测】[noip2016十连测第四场]Problem A: 天空龙(数学相关)
- [数学 拉格朗日四平方和定理 Rho大整数分解] BZOJ 2904 平方和
- BZOJ 2742: [HEOI2012]Akai的数学作业
- bzoj 4305: 数列的GCD 数学
- bzoj 1257 [CQOI2007]余数之和sum 数学,分段优化
- 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)
- 【BZOJ1076】奖励关(动态规划,数学期望)