CF1051D Bicolorings dp】的更多相关文章

水题一道 $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…
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…
题目链接: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 …
题目描述 咳咳,懒得复制了上面是两张图:) 解题思路 这题是一道很好的题,感觉之前做过,一开始手推状态找规律,可以用状压但是没想到 借鉴了一下大佬的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…
考试T2,随便推一推就好了~ code: #include <bits/stdc++.h> #define N 1015 #define mod 998244353 #define ll long long #define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout) using namespace std; ll f[N][N&l…
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…
/* 给定一个二行n列的格子,在里面填黑白色,要求通过黑白色将格子分为k块 请问有多少种填色方式 dp[j][k][0,1,2,3] 填到第j列,有k块,第j列的颜色, */ #include<bits/stdc++.h> using namespace std; #define ll long long #define mod 998244353 //0全白,1黑白,2白黑,3黑黑 ll dp[][*][],n,k; int main(){ cin>>n>>k; me…
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…
DP刷题记录 (本文例题目前大多数都选自算法竞赛进阶指南) TYVJ1071 求两个序列的最长公共上升子序列 设\(f_{i,j}\)表示a中的\(1-i\)与b中色\(1-j\)匹配时所能构成的以\(b_j\)结尾的最长公共上升子序列的长度 考虑转移 \[ f_{i,j} = \left\{\begin{array}{l}{f_{i - 1,j}\quad \quad \quad \quad \quad \quad\quad(a_i \not= b_j)} \\ {\max_{k = 1}^{…