【jzoj4870】【涂色游戏】【动态规划】【矩阵快速幂】
来源:互联网 发布:如何做淘宝海外买手 编辑:程序博客网 时间:2024/06/06 08:29
题目大意
解题思路
设f[i][j]表示一列有i个数,j种颜色的方案数,f[i][j]=f[i-1][j-1]*(p-j+1)+f[i-1][j]*j。g[i][j]表示第i列,j种颜色的方案数,g[i][j]=g[i-1][k]*mat[j][k]。设x表示i,j并集,mat[i][j]=f[n][j]/c[p][j]*c[i][i+j-x]*c[p-i][x-i]。推出矩阵后就可以快速幂。
code
#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define LL long long#define LD double#define max(a,b) ((a>b)?a:b)#define min(a,b) ((a>b)?b:a)#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)using namespace std;int const inf=1e9;int const maxn=100;int n,m,p,q;LL f[maxn+10][maxn+10],ni[maxn+10],c[maxn+10][maxn+10],ans[maxn+10][maxn+10],mat[maxn+10][maxn+10],tmp[maxn+10][maxn+10],mod=998244353;void multansmat(){ fo(i,1,maxn)fo(j,1,maxn)tmp[i][j]=0; fo(i,1,maxn)fo(j,1,maxn)fo(k,1,maxn) tmp[i][k]=(tmp[i][k]+ans[i][j]*mat[j][k])%mod; fo(i,1,maxn)fo(j,1,maxn)ans[i][j]=tmp[i][j];}void multmatmat(){ fo(i,1,maxn)fo(j,1,maxn)tmp[i][j]=0; fo(i,1,maxn)fo(j,1,maxn)fo(k,1,maxn) tmp[i][k]=(tmp[i][k]+mat[i][j]*mat[j][k])%mod; fo(i,1,maxn)fo(j,1,maxn)mat[i][j]=tmp[i][j];}LL Pow(LL x,LL y){ LL z=1; for(;y;){ if(y&1)z=(z*x)%mod; x=(x*x)%mod; y/=2; } return z;}int main(){ //freopen("color.in","r",stdin); //freopen("color.out","w",stdout); freopen("d.in","r",stdin); freopen("d.out","w",stdout); scanf("%d%d%d%d",&n,&m,&p,&q); fo(i,0,maxn){ c[i][0]=1; fo(j,1,i) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; } fo(i,1,p)ni[i]=Pow(c[p][i],mod-2); f[0][0]=1; fo(i,1,n) fo(j,1,min(i,p)) f[i][j]=(f[i-1][j-1]*(p-j+1)%mod+f[i-1][j]*j%mod)%mod; fo(i,1,p) fo(j,1,p){ fo(x,max(q,max(i,j)),min(p,i+j)) mat[i][j]=(mat[i][j]+f[n][j]*ni[j]%mod*c[i][i+j-x]%mod*c[p-i][x-i]%mod)%mod; //mat[i][j]=(mat[i][j])%mod; } fo(i,1,p)ans[1][i]=f[n][i];m--; for(;m;){ if(m&1)multansmat(); multmatmat(); m/=2; } LL anss=0; fo(i,1,p)anss=(anss+ans[1][i])%mod; printf("%lld",anss); return 0;}
0 0
- 【jzoj4870】【涂色游戏】【动态规划】【矩阵快速幂】
- [JZOJ4870]涂色游戏
- JZOJ4870. 涂色游戏
- 动态规划 && 矩阵快速幂
- jzoj 4870. 【NOIP2016提高A组集训第9场11.7】涂色游戏 动态规划+排列组合+矩阵乘法
- 动态规划与矩阵快速幂
- 矩阵快速幂优化的动态规划
- JZOJ4870. 【NOIP2016提高A组集训第9场11.7】涂色游戏
- qduoj LC的涂色游戏(快速幂)
- [动态规划+矩阵快速幂优化]Pku3420--Quad Tiling
- POJ_3420_Quad Tiling_搜索,矩阵快速幂,状态压缩,动态规划
- hdu 2842 Chinese Rings(动态规划+矩阵快速幂)
- hdu2604 Queuing (矩阵快速幂+动态规划)
- 【jzoj4787】【数格子】【 状态压缩动态规划】【矩阵快速幂】
- CH 30 摆花 [动态规划] [矩阵快速幂优化]
- 【jzoj4854】【小澳的坐标系】【动态规划】【矩阵快速幂】
- bzoj4818【SDOI2017】序列计数 矩阵快速幂+动态规划
- [动态规划+高精度] 矩阵取数游戏
- 【软考总结】OSI/RM
- android中保存图片到/data/data/<package name>/files/目录中
- 数据库设计三大范式
- 有关与java初学者的面试题
- 嵌入式linux面试题解析——Linux应用编程部分
- 【jzoj4870】【涂色游戏】【动态规划】【矩阵快速幂】
- 欢迎使用CSDN-markdown编辑器
- 40.我的订单(使用NineGrilView,显示九宫格图片)
- from序列化后台取值
- Servlet Mapping 中/ 和 /*的区别
- 一天一条Linux指令-basename
- 各大网站css初始化代码
- Python基础-切片和迭代
- uva1030 Image Is Everything