这是一道玄学组合数和神仙思路。。。

题目大意:给出一个n*m的网格,每个格子里只能涂一种颜色,一共有p中颜色,要求任意相邻两列都出现了

至少q种颜色的方案数。

n≤100,m≤,q≤p≤100。

看这m的范围,很容易想到矩阵乘法,所以可以先考虑递推式。

设dp[i][j]表示前i列最后一列共有j种颜色的方案数。

那么显然可以得到dp[i][k]=dp[i-1][j]*ans[j][k]。其中ans[j][k]表示的是这层有j种颜色,下一层有k种。

那么我们知道ans[j][k]怎么求就可以得到答案了。

因为两次选择的颜色会有重复,直接利用组合数寻找规律需要很多容斥,也很困难。

所以我们考虑枚举两次的并集,设并集为x,那么这次的方案组成就是在满足条件的情况下,

和上次相交的颜色的选择的方案乘上这次的新颜色的选择的方案。j+k-x表示的就是交集。

最后还要乘上在n个位置涂上k中颜色的方案数。设g[n][k]表示这个方案数。

那么就是要求在i个位置涂上j个颜色的方案数,可以类比为有j个不同的盒子,需要把i个不同的东西放进去的方案数。

这个问题就是第二类斯特林,结论为,大概的意思就是

可以从放过的盒子里在放一个,一共j种,也可以在没放过的新盒子放一个,这个新盒子可以是j中的任何一个,

所以一共j种。

那么最后得到的关于ans的表达式就是

对于dp的初值就是,就是指从所有颜色中选出j个颜色的方案数乘上放j个颜色的方案数。

用矩阵乘法优化一下即可,最后答案是。(PS:我懒了。。这个矩乘就直接用了)。。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define mode 998244353
using namespace std;
typedef long long ll;
int n,m,p,q;
int val[105][105];
int used[2][105];
ll sum;
ll c[105][105];
ll g[105][105];
void yhsj()
{for(int i=0;i<=102;i++){c[i][0]=c[i][i]=1;for(int j=1;j<i;j++){c[i][j]=(c[i-1][j]+c[i-1][j-1])%mode;}}
}
struct no
{ll f[105][105];
}tmp,ans;
no operator *(no a,no b)
{no re;for(int i=1;i<=102;i++){for(int j=1;j<=102;j++){re.f[i][j]=0;for(int k=1;k<=102;k++){re.f[i][j]+=a.f[i][k]*b.f[k][j]%mode;re.f[i][j]%=mode;}}}return re;
}
int main()
{freopen("color.in","r",stdin);freopen("color.out","w",stdout);scanf("%d%d%d%d",&n,&m,&p,&q);yhsj();g[0][0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){g[i][j]=j*(g[i-1][j]+g[i-1][j-1])%mode;}}for(int j=1;j<=p;j++)//这层的颜色数 {for(int k=1;k<=p;k++)//下层的颜色数{for(int x=max(q,max(j,k));x<=min(p,j+k);x++){tmp.f[j][k]+=c[j][j+k-x]*c[p-j][x-j]%mode;tmp.f[j][k]%=mode;}tmp.f[j][k]*=g[n][k]%mode;tmp.f[j][k]%=mode;} }m--;for(int i=1;i<=p;i++)ans.f[i][i]=1;while(m){if(m%2==1) ans=ans*tmp;tmp=tmp*tmp;m>>=1;}for(int i=1;i<=p;i++){for(int j=1;j<=p;j++){sum=(sum+g[n][i]*ans.f[i][j]%mode*c[p][i]%mode)%mode;//相当于把初值的矩阵直接求了,真实的答案就是∑f[n][1-p]。 }    }       printf("%I64d\n",sum);return 0;
}

NOIP十连测 涂色游戏相关推荐

  1. 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】

    涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...

  2. 【NOIP 模拟赛】平均数 涂色游戏 序列题解

    吐槽(完跪):神tmNOIP模拟赛,看到大题头根本高级数据结构什么的想都没想,结果死的很惨,第三题竟然要可持久化线段树,这NOIP我服了. 平均数: 这道题40分相信大家都能拿到,剩下的60分讲真考验 ...

  3. qduoj LC的涂色游戏(快速幂)

    题目链接:https://qduoj.com/problem/12/点击打开链接 LC的涂色游戏 发布时间: 2015年9月19日 21:42   时间限制: 1000ms   内存限制: 256M ...

  4. c语言写一个格子涂色的游戏,不一样的涂色游戏小程序,这个魔力贴贴涂色游戏有点意思...

    原标题:不一样的涂色游戏小程序,这个魔力贴贴涂色游戏有点意思 30000+游戏爱好者已加入我们! 沐沐带你发现好游戏! <魔力贴贴>游戏小程序好玩吗? <魔力贴贴>小游戏怎么玩 ...

  5. NOI Online #2 提高组 第一题:涂色游戏

    NOI Online #2 提高组 第一题:涂色游戏 前言 题目 解析 代码 前言 呦呵,这道题我竟然爆零了 而且我的暴力dfs死循环了!\bold{\Large\xcancel\text{而且我的暴 ...

  6. qduoj LC的涂色游戏

    LC的涂色游戏 发布时间: 2015年9月19日 21:42   时间限制: 1000ms   内存限制: 256M 描述 LC是实验室传说级的大神,最近喜欢上了涂色游戏,现在纸上有n块空白区域,lc ...

  7. 橡皮擦的英语_从填字涂鸦到英语启蒙,家长口中的儿童版“秘密花园”涂色游戏测评【玩具测评】...

    #前情提要#丰富的拓展玩法让简单的穿珠游戏大不同,点击<手眼协调与数学启蒙,用线绳穿珠游戏促进能力发展>了解详情. 今天我们为大家带来了一篇绘画+英语启蒙学习玩具的测评报告.这款玩具是植绒 ...

  8. 涂色游戏color(【CCF】NOI Online 能力测试2 提高组第一题 )

    子序列问题sequence([CCF]NOI Online能力测试2 提高组第二题 ) 游戏match([CCF]NOI Online能力测试2 提高组第三题 ) 题目背景 1s 256M 题目描述 ...

  9. Java方格染色_C++实现涂色游戏(博弈)

    在一个2*N的格子上,Alice和Bob又开始了新游戏之旅. 这些格子中的一些已经被涂过色,Alice和Bob轮流在这些格子里进行涂色操作,使用两种涂色工具,第一种可以涂色任意一个格子,第二种可以涂色 ...

最新文章

  1. php看什么教程,PHP初学者适合看什么
  2. 【一步教学,一步到位】mysql高可用架构
  3. uva 10453 - Make Palindrome(dp)
  4. Python除了人工智能,还能从事哪些工作?
  5. 字节跳动VQScore算法拿下ICME 2021“压缩UGC视频质量评估”比赛第一名
  6. HTML div 滚动条样式设计
  7. string最大容量_string初步使用
  8. appweb ejs_EJS部分
  9. matlab 多项式排序,MATLAB多项式
  10. LiLeiHanMeiMei的隐式马尔可夫爱情
  11. 51CTO学院优惠版
  12. 下面不属于电子计算机外存储器的是,2013年计算机专转本模拟题三答案
  13. mybatis在工作中的使用简介
  14. JAVA多线程向kafka的topic各分区中写入本地数据
  15. 《漫步华尔街》 读书笔记 part1 历史
  16. 组图:1912年斯德哥尔摩奥运会
  17. intel芯片内核linux,Linux:再见了Intel 386处理器
  18. 666666666666.com路路解密破解游戏第一部23题攻略
  19. 怎么利用NTFS文件权限打造安全u盘
  20. webpack工具链热替换 -- angularjs的粗放式实现

热门文章

  1. cnzz 广告管家 代码下载 java_CNZZ广告管家:免费管理你的广告
  2. 电影院竟然暗藏这么多“玄机”!
  3. 2022 万向区块链秋季黑客马拉松全球报名开启!
  4. 深入浅出微信公众平台实战开发(微网站、LBS云、Api接口调用、服务号高级接口)
  5. Fundation 5发布:号称最快版本,响应式用户体验更完善
  6. python两个集合相加_两个集合相加java
  7. python可视化stackplot函数用法-绘制堆积面积图。
  8. 【幻灯片制作软件】Focusky教程 | 设置幻灯片播放时间间隔
  9. RPM(红帽软件包管理器)详解
  10. 计算机图形学应用论文,计算机图形学研究和应用论文.docx