题目描述

咳咳,懒得复制了上面是两张图:)

解题思路

这题是一道很好的题,感觉之前做过,一开始手推状态找规律,可以用状压但是没想到

借鉴了一下大佬的dp

modify数组用以累加新增的状态数

dp数组表示前i列第j个连通块,a,b表示该列的状态,转移方程见代码

下面就是美丽的代码了

AC Code

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define P (LL)(998244353) typedef long long LL;
typedef long double ld;
typedef unsigned long long ULL; using namespace std; const int MAXN = + ;
const int MAXK = MAXN << ;
int dp[MAXN][MAXK][][];
int modify[][][][];
void pre() {
modify[][][][] = ; modify[][][][] = ; modify[][][][] = ; modify[][][][] = ;
modify[][][][] = ; modify[][][][] = ; modify[][][][] = ; modify[][][][] = ;
modify[][][][] = ; modify[][][][] = ; modify[][][][] = ; modify[][][][] = ;
modify[][][][] = ; modify[][][][] = ; modify[][][][] = ; modify[][][][] = ;
}
int main() {
int n , k;
cin>>n>>k;
pre();
dp[][][][] = dp[][][][] = ;
dp[][][][] = dp[][][][] = ; for(int i = ; i <= n; i++)
for(int j = ; j <= k; j++)
for(int a = ; a < ; a++)
for(int b = ; b < ; b++)
for(int A = ; A < ; A++)
for(int B = ; B < ; B++) {
int block = modify[A][B][a][b];
if(j >= block) dp[i][j][a][b] = (dp[i][j][a][b] + dp[i - ][j - block][A][B]) % P;
}
int ans = ;
for(int A = ; A < ; A++)
for(int B = ; B < ; B++)
ans = (ans + dp[n][k][A][B]) % P;
cout<<ans;
return ;
}

CF1051D Bicolorings的更多相关文章

  1. CF1051D Bicolorings dp

    水题一道 $f[i][j][S]$表示$2 * i$的矩形,有$j$个联通块,某尾状态为$S$ 然后转移就行了... #include <vector> #include <cstd ...

  2. CF1051D Bicolorings 递推

    考试T2,随便推一推就好了~ code: #include <bits/stdc++.h> #define N 1015 #define mod 998244353 #define ll ...

  3. codeforces 1051 D. Bicolorings (DP)

    D. Bicolorings time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  4. Codeforces 1051 D.Bicolorings(DP)

    Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...

  5. CodeForces - 1051D Bicolorings(DP)

    题目链接:http://codeforces.com/problemset/problem/1051/D 看了大佬的题解后觉着是简单的dp,咋自己做就做不来呢. 大佬的题解:https://www.c ...

  6. cf1051d 简单的状态压缩dp

    /* 给定一个二行n列的格子,在里面填黑白色,要求通过黑白色将格子分为k块 请问有多少种填色方式 dp[j][k][0,1,2,3] 填到第j列,有k块,第j列的颜色, */ #include< ...

  7. D. Bicolorings

    传送门 [http://codeforces.com/contest/1051/problem/D] 题意 相当于有个2列n行得棋盘,棋盘上的格子只能是黑或者白,问你联通块为k得方案数有多少,结果对 ...

  8. Educational Codeforces Round 51 D. Bicolorings(dp)

    https://codeforces.com/contest/1051/problem/D 题意 一个2*n的矩阵,你可以用黑白格子去填充他,求联通块数目等于k的方案数,答案%998244353. 思 ...

  9. 2018.09.21 codeforces1051D. Bicolorings(线性dp)

    传送门 sb线性DP. f[i][j][0/1/2/3]f[i][j][0/1/2/3]f[i][j][0/1/2/3]表示前i列j个连通块且第i列状态为00/01/10/11时的方案总数. 这个显然 ...

随机推荐

  1. 有效的minidump(一)

    简介 在过去的几年中,崩溃转储成为我们调试活动的一个重要部分.当我们的软件在客户的机器出现故障时,创建应用程序状态的快照并使用在开发人员机器上运行的传统调试器对其进行分析的可能性是非常宝贵的.第一代崩 ...

  2. 分类模型的性能评价指标(Classification Model Performance Evaluation Metric)

    二分类模型的预测结果分为四种情况(正类为1,反类为0): TP(True Positive):预测为正类,且预测正确(真实为1,预测也为1) FP(False Positive):预测为正类,但预测错 ...

  3. C Primer Plus--高级数据结构之二叉树

    目录 二叉搜索树 Binary Search Tree 用C构建二叉树ADT 树结构的定义 C Primer Plus--高级数据结构表示之二叉树 二叉搜索树 Binary Search Tree 二 ...

  4. Detection of Glacier Calving Margins with Convolutional Neural Networks: A Case Study

    利用Unet结构对landsat数据进行冰川裂缝提取,结构如下:训练集很小只有123张152*240图片

  5. mysql right() 函数

    mysql> ); +---------------------+ | right() | +---------------------+ | dedede | +--------------- ...

  6. ICEM-三角形特征几何

    原视频下载地址:https://pan.baidu.com/s/1qY8SKri 密码: wf17

  7. AOP通知类型

    AOP通知类型 前置通知 在目标方法执行之前进行操作 后置通知 在目标方法执行之后 进行操作 环绕通知 在目标方法执行之前 和之后进行操作 public Object arount() 异常抛出通知 ...

  8. 【定制开发】经纪人报备软件 全民经纪人系统 房产中介微信小程序分享家恒房通

    信真科技2019年最先扛鼎之作 - 全民经纪人软件系统 1.含有最基础的经纪人注册.客户报备系统功能: 2.可支持定制开发,针对房企售楼部.中介门店: 3.与微信端绑定使用,方便快捷,快速分享: 4. ...

  9. php 5 与7有什么区别

    PHP 7.0使用新版的ZendEngine引擎,带来了许多新的特性,其与相比,有如下特性: 性能提升:PHP7比PHP5.0性能提升了两倍. 全面一致的64位支持. 以前的许多致命错误,现在改成抛出 ...

  10. 数据库sql优化总结之4--SQL优化总结

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...