【NOIP2016提高组11.7】涂色游戏
来源:互联网 发布:电商数据分析软件 编辑:程序博客网 时间:2024/05/16 07:38
题目大意
给你n行m列的网格,每个格子可以涂上一种颜色,一共有p种颜色,要求相邻两行的颜色总数不小于q。求方案数模998244353的结果。
n≤100 m≤
分析
首先设f[i][j]表示决策好了前i列,最后一列有j种颜色的方案数。现在考虑第i+1列。
枚举一个k,表示第i+1列的颜色总数,再枚举两行都出现的颜色数x。转移:
其中sum(k)为n行填恰好k个颜色的方案数,可以
现在m很大,然而n很小,可以矩阵乘法+快速幂转移。
时间复杂度
注意模数
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=105,mo=998244353;typedef long long LL;int n,m,p,q,c[N][N],a[N][N],f[N][N],g[N][N],ans,Fac[N],M,b[N][N];void mulf(){ memset(b,0,sizeof(b)); for (int i=0;i<=p;i++) for (int j=0;j<=p;j++) for (int k=0;k<=p;k++) b[i][j]=(b[i][j]+(LL)f[i][k]*f[k][j])%mo; memcpy(f,b,sizeof(f));}void mula(){ memset(b,0,sizeof(b)); for (int i=0;i<=p;i++) for (int j=0;j<=p;j++) for (int k=0;k<=p;k++) b[i][j]=(b[i][j]+(LL)f[i][k]*a[k][j])%mo; memcpy(f,b,sizeof(f));}void quick(int x){ if (!x) return; quick(x>>1); mulf(); if (x&1) mula();}int main(){ freopen("color.in","r",stdin); freopen("color.out","w",stdout); scanf("%d%d%d%d",&n,&m,&p,&q); c[0][0]=Fac[0]=1; for (int i=1;i<N;i++) { c[i][0]=c[i][i]=1; Fac[i]=(LL)Fac[i-1]*i%mo; for (int j=1;j<i;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mo; } g[0][0]=1; for (int i=1;i<=n;i++) for (int j=1;j<=p;j++) for (int k=0;k<i;k++) g[i][j]=(g[i][j]+(LL)g[k][j-1]*c[i][k])%mo; for (int i=0;i<=p;i++) { f[i][i]=1; for (int j=0;j<=p;j++) for (int k=max(i-j-p,0);k<=min(i,j) && i+j-k>=q;k++) a[i][j]=(a[i][j]+(LL)c[p-i][j-k]*c[i][k]%mo*g[n][j]%mo)%mo; } quick(m-1); for (int i=1;i<=min(n,p);i++) for (int j=1;j<=min(n,p);j++) ans=(ans+(LL)f[i][j]*c[p][i]%mo*g[n][i])%mo; printf("%d\n",ans); fclose(stdin); fclose(stdout); return 0;}
0 0
- 【NOIP2016提高组11.7】涂色游戏
- 【NOIP2016提高A组集训第9场11.7】涂色游戏
- JZOJ4870. 【NOIP2016提高A组集训第9场11.7】涂色游戏
- jzoj 4870. 【NOIP2016提高A组集训第9场11.7】涂色游戏 动态规划+排列组合+矩阵乘法
- 【NOIP2016提高A组模拟】配对游戏
- NOIP2016提高组总结
- noip2016提高组总结
- NOIP2016 提高组 题解
- NOIP2016提高组总结
- NOIP2016 提高组 题解
- NOIP2016 提高组 题解
- 【NOIP2016提高组】蚯蚓
- NOIP2016提高组 DAY1
- NOIP2016提高组day1
- NOIP2016提高组题解
- NOIP2016提高组复赛
- NOIP2016提高组题解
- NOIP2016提高组Day1
- 王朝 第十一周 等比数列
- 【转载】SAP中AUTHORITY-CHECK 的使用
- 【框架-MFC】关于CFileDialog保存文件获取扩展名(后缀名)
- DB主从一致性架构优化4种方法
- csv文件在BSP调试中的一个运用
- 【NOIP2016提高组11.7】涂色游戏
- 关联域名挖掘
- RTP H264 NAL
- border属性实现三角、圆角图形
- tomcat在eclipse中起动成功,主页却打不开
- 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
- Android 手势识别(单击 双击 抬起 短按 长按 滚动 滑动)
- VS2015 遇到异常。这可能是由某个扩展导致的
- 一天一条Linux指令-tzselect