题意

给一个2行n列的矩阵填上黑色和白色,求连通块个数为k个的填色方案数量(mod 998244353)
 
因为只有两行,为n-1列的矩阵增加1列的情况数只有很少,容易想到用 (i,k) 表示 i 列有 k个连通块的矩阵, 但是它在向 i+1 列的矩阵转移时,需要知道最后一列的状态,所以可以用 0, 1, 2, 3表示最后一列为 00, 01, 10,11状态就增加一维变成 (i,k,s),然后就是分析递推关系:
 
 
(i,k,0) 的矩阵,可以由i−1 列的矩阵添加一列 00 得到,当它的结尾为 00, 01, 10, 11时,分别会让连通块个数:不变,不变,不变,+1,所以 (i,k,0)由 (i−1,k,0), (i−1,k,1), (i−1,k,2), (i−1,k−1,3)
 
 
dp[i][k][0]=(dp[i-1][k][0]+dp[i-1][k][1]+dp[i-1][k][2]+dp[i-1][k-1][3])%mod;
 
(i,k,1)的矩阵同理,为i−1列的矩阵添加 01,当结尾为 00,01, 10, 11时,分别会使连通块的个数:+1,不变,+2,+1,所以(i,k,1)由(i−1,k−1,0),(i−1,k,1),(i−1,k−2,2),(i−1,k−1,3)得到:
dp[i][k][1]=(dp[i-1][k-1][0]+dp[i-1][k][1]+dp[i-1][k-2][2]+dp[i-1][k-1][3])%mod;
其他同理:

dp[i][k][2]=(dp[i-1][k-1][0]+dp[i-1][k-2][1]+dp[i-1][k][2]+dp[i-1][k-1][3])%mod;
dp[i][k][3]=(dp[i-1][k-1][0]+dp[i-1][k][1]+dp[i-1][k][2]+dp[i-1][k][3])%mod;

很容易得出初始化:

dp[1][2][2]=1;
dp[1][2][1]=1;
dp[1][1][0]=1;
dp[1][1][3]=1;

答案:

long long ans=0;
for(int i=0 ; i<4 ; i++)
ans=(ans+dp[n][m][i])%mod;
printf("%I64d\n",ans);

#include<bits/stdc++.h>

using namespace std ;

const int mod =  ;

long long  dp[][][];

int main( )
{
int n,m;
scanf("%d%d",&n,&m);
dp[][][]=;
dp[][][]=;
dp[][][]=;
dp[][][]=;
for(int i= ; i<=n ; i++)
{
for(int k= ; k<=min(*i,m) ; k++)
{
dp[i][k][]=(dp[i-][k][]+dp[i-][k][]+dp[i-][k][]+dp[i-][k-][])%mod;
dp[i][k][]=(dp[i-][k-][]+dp[i-][k][]+dp[i-][k-][]+dp[i-][k-][])%mod;
dp[i][k][]=(dp[i-][k-][]+dp[i-][k-][]+dp[i-][k][]+dp[i-][k-][])%mod;
dp[i][k][]=(dp[i-][k-][]+dp[i-][k][]+dp[i-][k][]+dp[i-][k][])%mod;
}
}
long long ans=;
for(int i= ; i< ; i++)
ans=(ans+dp[n][m][i])%mod;
printf("%I64d\n",ans);
return ;
}

CF D Bicolorings的更多相关文章

  1. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  2. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  3. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  4. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  5. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  6. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  7. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

  8. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  9. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

随机推荐

  1. Aborted connection+druid

    试一试setTimeBetweenEvictionRunsMillis +setMaxEvictableIdleTimeMillis小于 mysql的wait_timeout

  2. Android指针管理:RefBase,SP,WP

    Android中通过引用计数来实现智能指针,并且实现有强指针与弱指针.由对象本身来提供引用计数器,但是对象不会去维护引用计数器的值,而是由智能指针来管理. 要达到所有对象都可用引用计数器实现智能指针管 ...

  3. Eclipse中,将tab缩进改为4个空格

    用4个空格来缩进 , 不要用Tab来缩进 , 因为Tab在不同平台的点位不一样 eclipse->preferences->General->Editors->Text Edi ...

  4. __call()和__callStatic()方法

    __call() 当对象访问不存在的方法时,__call()方法会被自动调用__callStatic() 当对象访问不存在的静态方法时,__callStatic()方法会被自动调用 这两个方法在PHP ...

  5. 05 HTML字符串转换成jQuery对象、绑定数据到元素上

    1 要求 将一段 HTML脚本 封装成一个字符串,将这个字符串转换成一个jQuery对象:然后将这个jQuery对象添加到指定的元素中去 2 步骤 定义字符串 var str = '<div i ...

  6. Camera 3D概念

    1. integration time即积分时间是以行为单位表示曝光时间(exposure time)的,比如说INT TIM为159,就是指sensor曝光时间为159行,两者所代表的意思是相同的, ...

  7. can基础知识介绍

    1.什么是can 2.can的特点 2.物理层特征 我们使用ISO11898标准,物理层特征如图所示 3.帧的种类介绍 实际上有一些帧是有硬件来实现的. 4.数据帧介绍 5.总线仲裁 6.位时序(用于 ...

  8. IP地址及子网掩码计算

    主机号全0表示网络号,主机号全1表示广播地址 我们都知道,IP是由四段数字组成,在此,我们先来了解一下3类常用的IP A类IP段 0.0.0.0 到127.255.255.255 B类IP段 128. ...

  9. kaggle Pipelines

    # Most scikit-learn objects are either transformers or models. # Transformers are for pre-processing ...

  10. 安装windows系统备忘

    1.已写入系统镜像的U盘 2.激活工具(同时激活系统及office) 3.如果没有网口或网线,需要准备万能网卡驱动 4.office 5.360 6.输入法 7.微信 8.谷歌浏览器