题目: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[][][maxn];
ll n,k;
int main(){
cin>>n>>k;
dp[][][]=;// 0 1
dp[][][]=;// 1 0
dp[][][]=;// 1 1
dp[][][]=;// 0 0
for(int i=;i<=n;i++){
for(int j=;j<=k;j++){
dp[][][j]=dp[][][j];
dp[][][j]=dp[][][j];
dp[][][j]=((dp[][][j]+dp[][][j])%mod+dp[][][j])%mod;
dp[][][j]=((dp[][][j]+dp[][][j])%mod+dp[][][j])%mod;
if(j->=){
dp[][][j]=(dp[][][j]+dp[][][j-])%mod;
dp[][][j]=(dp[][][j]+dp[][][j-])%mod;
}
if(j->=){
dp[][][j]=(dp[][][j]+dp[][][j-])%mod;
dp[][][j]=(dp[][][j]+dp[][][j-])%mod;
dp[][][j]=((dp[][][j]+dp[][][j-])%mod+dp[][][j-])%mod;
dp[][][j]=((dp[][][j]+dp[][][j-])%mod+dp[][][j-])%mod;
}
}
for(int j=;j<=k;j++){
for(int z=;z<=;z++){
dp[][z][j]=dp[][z][j];
dp[][z][j]=;
}
}
}
ll sum=((dp[][][k]+dp[][][k])%mod+(dp[][][k]+dp[][][k])%mod)%mod;
printf("%lld",sum);
}

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

  1. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  2. CodeForces - 1051D Bicolorings(DP)

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

  3. CodeForces - 1038D (线性DP)

    题目:https://codeforces.com/problemset/problem/1038/D 题意:给你n个数字,每个数字可以吃左右两边的数,然后吃完后自己变成 a[i]-a[i+1]或者a ...

  4. [CodeForces - 1272D] Remove One Element 【线性dp】

    [CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...

  5. [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题

    题目来源: Codeforces - 1110D 题意:你有n张牌(1,2,3,...,m)你要尽可能多的打出[x,x+1,x+2] 或者[x,x,x]的牌型,问最多能打出多少种牌 思路: 1.三组[ ...

  6. LightOJ1044 Palindrome Partitioning(区间DP+线性DP)

    问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...

  7. hdu1712 线性dp

    //Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...

  8. 动态规划——线性dp

    我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...

  9. POJ 2479-Maximum sum(线性dp)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33918   Accepted: 10504 Des ...

随机推荐

  1. Python模块学习之xlrd、xlutils、openpyxl 读写/追加Excel文件

    Python操作Excel的四个工具包 xlrd: 对Excel进行读相关操作,注意只能操作 .xls xlwt: 对Excel进行写相关操作,注意只能操作 .xls,且只能创建一个全新的Excel然 ...

  2. cts-on-gsi测试流程

    测试前提: 1.发货user版本 2.selinux:Enable 3.连接ADB,stay awake 4.烧录XXX申请的key 5.外网环境(ipv6) ATV9测试准备(正常准备环境+fast ...

  3. 【Unity知识点】安卓游戏如何在切后台后继续运行

    解决方法很简单,在android项目AndroidManifest.xml文件中的activity中添加如下内容: android:configChanges="fontScale|keyb ...

  4. upc组队赛17 Stone Game【极小值】

    Stone Game 题目链接 题目描述 Alice and Bob are always playing game! The game today is about taking out stone ...

  5. python time 和日期相关模块

    时间日期相关的模块 calendar 日历模块 time 时间模块 datetime 日期时间模块 timeit 时间检测模块 日历模块 calendar() 功能:获取指定年份的日历字符串 格式:c ...

  6. 同步GitHub上fork的项目

    最近在做“Python练习册,每天一个小程序”,fork了项目并贡献自己写的代码,项目还有其他人在贡献代码,每天都会更新,这就涉及到了自己fork的项目与原项目的同步更新问题,下面就是我最常用的方法. ...

  7. 《JAVA设计模式》之组合模式(Composite)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

  8. Java 遍历某个目录

    import java.io.File; import java.io.IOException; public class DirErgodic { public static void find(S ...

  9. 13、numpy——算术函数

    NumPy 算术函数 1.NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide(). 需要注意的是数组必须具有相同的形状或符合数组广播规则 ...

  10. elasticsearch 深入 —— normalizer

    keyword字段的normalizer属性类似于分析器,只是它保证分析链生成单个token. 在索引关键字之前,以及在通过诸如match查询之类的查询解析器或者通过诸如term查询之类的术语级查询搜 ...