题意

给一个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. 34款Firefox渗透测试插件

    1:Firebug Firefox的 五星级强力推荐插件之一,不许要多解释 2:User Agent Switcher 改变客户端的User Agent的一款插件 3:Hackbar 攻城师必备工具, ...

  2. JavaScript中数值和对象

    一.创建对象并将其初始化  a.使用new创建对象和方法 <<!DOCTYPE html> <html> <head> <mete http-equiv ...

  3. springmvc 中异常处理

    springmvc 中异常处理常见三种处理方式: 1:SimpleMappingExceptionResolver处理的是处理器方法里面出现的异常 2 3.自定义异常处理器:处理的是处理器方法里面出现 ...

  4. springmvc 处理器方法返回的是string 重定向到处理器方法

  5. sql基本查询语句练习

    student(S#,Sname,Sage,Ssex) 学生表       S#:学号: Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname,T#) 课程表 ...

  6. [转]MySQL5.6.22 安装

    原文路径 http://jifeng3321.iteye.com/blog/2181517?utm_source=tuicool   由于一直做银行项目,所以一直在用oracle和db2,但最近自己想 ...

  7. Struts2框架06 ValueStack

    原文地址:点击前往 1 什么是ValueStack 称为值栈,Struts提供的共享数据的数据结构 2 为什么要使用ValueStack 从控制器向浏览器传递数据 存储与请求相关的对象信息(sessi ...

  8. Evil Book -- CodeChef

    传送门 分析 对于这道题,我们首先思考一个贪心策略,即对于所有我们要打败的厨师我们肯定可以先打败需使用帮助次数少的厨师再打败需使用帮助次数多的厨师 ,因为这样可以使得能支付得起帮助费用的可能性尽可能的 ...

  9. Fiddler的Request Builder(Composer)模拟发送POST请求

    传json格式: Parsed写: User-Agent: Fiddler Host: localhost:1455 Content-Type: application/json; charset=u ...

  10. 解决低版本Eclipse安装Findbugs插件无法显示问题

    问题描述 Eclipse安装Findbugs,显示安装成功,但是重启Eclipse在[Window]-[show view]-[other]中没有显示 原因 Eclipse版本太低,新版的Findbu ...