CodeForces - 1051D (线性DP) - Lis~

Lis- 2021-08-07 原文


CodeForces – 1051D (线性DP)


题目:https://codeforces.com/problemset/problem/1051/D

题意:一个2行n列的矩形,上面有黑白块,然后问你怎么布置才能有k个连通块,问有多少种方案数

思路:其实就是一个矩阵,我们一次放一列

四种状态    

黑    |   白 | 白 | 黑

白  |  黑 | 白 | 黑

我们dp[n][m][k],第n列第m种状态k个连通块的方案数,现在我们算放每个状态时,计算一次增加了多少个连通块

因为数组太大了,所以我们用滚动数组

然后递推就行了

#include<bits/stdc++.h>
#define maxn 2005
#define mod 998244353 
using namespace std;
typedef long long ll;
ll dp[2][4][maxn];
ll n,k;
int main(){
    cin>>n>>k;
    dp[0][0][2]=1;// 0 1
    dp[0][1][2]=1;// 1 0
    dp[0][2][1]=1;// 1 1
    dp[0][3][1]=1;// 0 0
    for(int i=2;i<=n;i++){
        for(int j=0;j<=k;j++){
            dp[1][0][j]=dp[0][0][j];
            dp[1][1][j]=dp[0][1][j];
            dp[1][2][j]=((dp[0][0][j]+dp[0][1][j])%mod+dp[0][2][j])%mod;
            dp[1][3][j]=((dp[0][0][j]+dp[0][1][j])%mod+dp[0][3][j])%mod;
            if(j-2>=0){
                dp[1][0][j]=(dp[1][0][j]+dp[0][1][j-2])%mod;
                dp[1][1][j]=(dp[1][1][j]+dp[0][0][j-2])%mod;
            }
            if(j-1>=0){
                dp[1][2][j]=(dp[1][2][j]+dp[0][3][j-1])%mod;
                dp[1][3][j]=(dp[1][3][j]+dp[0][2][j-1])%mod;
                dp[1][0][j]=((dp[1][0][j]+dp[0][2][j-1])%mod+dp[0][3][j-1])%mod;
                dp[1][1][j]=((dp[1][1][j]+dp[0][2][j-1])%mod+dp[0][3][j-1])%mod;
            }
        }
        for(int j=0;j<=k;j++){
            for(int z=0;z<=3;z++){
                dp[0][z][j]=dp[1][z][j];
                dp[1][z][j]=0;
            }
        }
    } 
    ll sum=((dp[0][0][k]+dp[0][1][k])%mod+(dp[0][2][k]+dp[0][3][k])%mod)%mod;
    printf("%lld",sum);
} 

 

发表于
2019-08-24 19:12 
Lis~ 
阅读(150
评论(0
编辑 
收藏 
举报

 

版权声明:本文为Lis-原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Lis-/p/11405710.html

CodeForces - 1051D (线性DP) - Lis~的更多相关文章

  1. js之原生实现移动端手指滑动轮播图效果 – jessie-xian

    html部分 <!DOCTYPE html> <html lang="en"> < […]...

  2. 小程序云开发实战 – 银河使者

    小程序云开发实战 由于小程序本身存储数据的能力有限,所以不可能将大量的数据保存在客户端,而且将数据保存在本地既 […]...

  3. 第七章、特殊兴趣 – 欣乐

    第七章、特殊兴趣 目录 第七章、特殊兴趣 一、特殊兴趣的发展 二、特殊兴趣的类型 (一)收集物品 (二)积累知 […]...

  4. java eclipse 程序没错,运行结果显示无法加载主类的解决方法 – backyyan

    java eclipse 程序没错,运行结果显示无法加载主类的解决方法 2017-07-05 21:04  b […]...

  5. 批处理最完整人性化教程(.bat文件语法) – s1ihome

    批处理最完整人性化教程(.bat文件语法) 这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字 […]...

  6. ISC BIND9 – 最详细、最认真的从零开始的 BIND 9 – DNS服务搭建及其原理讲解 (Debian / Windows)

    从零开始搭建你的基础DNS BIND9服务器,完全详细记录以及讲解在配置阶段的各种问题。 ISC BIND9 […]...

  7. 网络怎样才能做到防范DDoS的攻击 – cunshen

    网络怎样才能做到防范DDoS的攻击 几乎所有的主机平台都有抵御DoS的设置,总结一下,基本的有几种:      […]...

  8. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

     目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort […]...

随机推荐

  1. 49个你应该了解的Android Studio技巧、插件与资源 http://www.apkbus.com/blog-822721-72630.html (出处: 安卓巴士

    49个你应该了解的Android Studio技巧、插件与资源http://www.apkbus.com/bl […]...

  2. docker自定义镜像仓库

    创建私有仓库 vim /etc/docker/daemon.json //使用私有仓库运行容器 , 宿主机ip […]...

  3. JAVA提高十四:HashSet深入分析

    JAVA提高十四:HashSet深入分析 前面我们介绍了HashMap,Hashtable,那么还有一个has […]...

  4. SaaS(软件即服务)、PaaS(平台即服务)、IaaS(基础架构即服务)、BaaS(区块链即服务)

    SaaS(软件即服务) PaaS(平台即服务) IaaS(基础架构即服务) BaaS(区块链即服务) 从小型企 […]...

  5. HoloWAN在连接路由器时应该选择WAN口还是LAN口,有什么区别?

    HoloWAN在连接路由器时应该选择WAN口还是LAN口,有什么区别?   在解决问题前,需要连接到,路由器的 […]...

  6. 浏览器解析url后执行过程

    1.用户输入网址,浏览器发起DNS查询请求 用户访问网页,DNS服务器(域名解析系统)会根据用户提供的域名查找 […]...

  7. phper必知必会(二)

    1.说说你对进程,线程以及协程的理解 进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础。进程 […]...

  8. 在网上摘的几个值得关注的java开源项目

      名称 资料 概况 OFBiz http://ofbizchina.com:8080/ http://www […]...

展开目录

目录导航