bzoj4870 [Shoi2017]组合数问题(dp+矩阵倍增)
来源:互联网 发布:vscode terminal 编辑:程序博客网 时间:2024/06/04 19:41
翻译一下题目:实际上就是要我们从nk件物品里面选出若干件,使得其数量模k等于r的方案数。f[i][j]表示前i件物品拿了若干件使得其数量模k等于j的方案数。显然有dp方程:f[i][j]=f[i-1][j]+f[i-1][j-1]。初始值:f[0][0]=1.用矩阵快速幂加速一下就好啦。时间复杂度为
#include <cstdio>#include <cstring>#define N 51#define ll long longint n,mod,r;ll kk;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}struct Matrix{ int mat[N][N]; Matrix(bool t){ memset(mat,0,sizeof(mat)); if(t) for(int i=0;i<n;++i) mat[i][i]=1; } Matrix operator*(Matrix b){ Matrix res(0); for(int i=0;i<n;++i) for(int j=0;j<n;++j) for(int k=0;k<n;++k) res.mat[i][j]=(res.mat[i][j]+(ll)mat[i][k]*b.mat[k][j])%mod; return res; } Matrix operator^(ll k){ Matrix base(0),res(1); memcpy(base.mat,mat,sizeof(mat)); for(;k;k>>=1,base=base*base) if(k&1) res=res*base; return res; }}trans(0),ans(0);int main(){// freopen("a.in","r",stdin); kk=read();mod=read();n=read();r=read(); kk*=n; for(int i=0;i<n;++i) trans.mat[i][i]++,trans.mat[(i-1+n)%n][i]++; ans.mat[0][0]=1; ans=ans*(trans^kk); printf("%d\n",ans.mat[0][r]); return 0;}
阅读全文
0 0
- bzoj4870 [Shoi2017]组合数问题(dp+矩阵倍增)
- 【BZOJ4870】组合数问题(SHOI2017)-矩阵优化DP
- jzoj5215&&bzoj4870[Shoi2017]组合数问题 dp+矩阵快速幂
- [BZOJ4870][SHOI2017]组合数问题 DP+矩阵快速幂
- BZOJ4870: [Shoi2017]组合数问题
- Bzoj4870:SHOI2017-组合数问题
- BZOJ4870: [Shoi2017]组合数问题
- [bzoj4870] [Shoi2017]组合数问题
- [BZOJ4870][Shoi2017]组合数问题 矩阵快速幂
- 【jzoj5215】【BZOJ4870】【Shoi2017】【GDOI2018模拟7.9】【组合数问题】【矩阵快速幂】
- [DP 倍增] BZOJ 4870 [Shoi2017]组合数问题
- 循环矩乘——Luogu3746/BZOJ4870 [SHOI2017]组合数问题
- 4870: [Shoi2017]组合数问题
- 【SHOI&SXOI2017】bzoj4870 组合数问题
- BZOJ 4870 [Shoi2017] 组合数问题
- bzoj P4870 [Shoi2017]组合数问题
- bzoj 4870: [Shoi2017]组合数问题
- BZOJ 4870: [Shoi2017]组合数问题 (递推+矩阵快速幂)
- ArrayLowHightOut
- 从外网访问VMware虚拟机的Web服务
- Linux命令更新系统时间,更新所有文件的时间
- js数据类型
- 文件组织和索引
- bzoj4870 [Shoi2017]组合数问题(dp+矩阵倍增)
- redis缓存总结一
- Java动态代理
- 搭建Hexo博客
- HDU
- hdu2604 queuing(dp+矩阵倍增)
- ArrayMaxTwoNum
- 词法分析
- 待解决:如何打开lazarus中math.pp下FPDOC_MATH编译选项