D. Bicolorings】的更多相关文章

D. Bicolorings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given a grid, consisting of $$$2$$$ rows and $$$n$$$ columns. Each cell of this grid should be colored either black o…
Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,(可以分别用0,1,2,3表示),于是定义dp[i][j][k]:涂到第i列分为j个连通块且第i列涂法为k的方案数,则有了代码中的转移式,共16种转移类型. #include<iostream> #include<cstdio> #include<algorithm> #in…
题目链接:http://codeforces.com/problemset/problem/1051/D 看了大佬的题解后觉着是简单的dp,咋自己做就做不来呢. 大佬的题解:https://www.cnblogs.com/tobyw/p/9685639.html 刚看的时候有点感觉 状态肯定是(i,k) 但是这个状态不具备无后效性 会受到i-1两个格子啥颜色的影响 然后就没往下想了qwq 大佬用了二进制来表示这两格的状态 现在的状态就是(i, k, color) color有4种可能 0,0 …
传送门 [http://codeforces.com/contest/1051/problem/D] 题意 相当于有个2列n行得棋盘,棋盘上的格子只能是黑或者白,问你联通块为k得方案数有多少,结果对 998244353取余 分析 三维dp下去,具体看图及代码 分析图 代码 #include <stdio.h> #include<bits/stdc++.h> using namespace std; #define ll long long ll dp[1001][2001][4];…
https://codeforces.com/contest/1051/problem/D 题意 一个2*n的矩阵,你可以用黑白格子去填充他,求联通块数目等于k的方案数,答案%998244353. 思路 按列dp,定义状态dp[i][j][k]为前i列,有j个联通块,最后一列为k的方案数 处理出列状态之间的转移(会新产生多少个新的联通块) 注意初始化问题 #include<bits/stdc++.h> #define P 998244353 #define ll long long using…
传送门 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时的方案总数. 这个显然可以轻松转移. 举例: f[i][j][0]=(f[i−1][j][0]+f[i−1][j][1]+f[i−1][j][2]+f[i−1][j−1][3])f[i][j][0]=(f[i-1][j][0]+f[i-1][j][1]+f[i-1][j][2]+f[i-1][j-1][3])%mod;f…
水题一道 $f[i][j][S]$表示$2 * i$的矩形,有$j$个联通块,某尾状态为$S$ 然后转移就行了... #include <vector> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> namespace remoon { #define re register #define de double #define le lo…
题意 给一个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 得到,当它…
[链接] 我是链接,点我呀:) [题意] 题意 [题解] dp[i][j][k]表示前i列,有j个联通块下,最后一列的状态为k的方案数 k如果为1的话,表示最后一列两个块不一样,k如果为0表示一样 枚举最后一列的情况转移就好 [代码] #include <bits/stdc++.h> using namespace std; const int maxn=1100; const long long mod=998244353; #define ll long long #define mem(…
题目描述 咳咳,懒得复制了上面是两张图:) 解题思路 这题是一道很好的题,感觉之前做过,一开始手推状态找规律,可以用状压但是没想到 借鉴了一下大佬的dp modify数组用以累加新增的状态数 dp数组表示前i列第j个连通块,a,b表示该列的状态,转移方程见代码 下面就是美丽的代码了 AC Code #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define P (LL)(998244353) typedef long long LL; typ…