CodeForces - 1051D Bicolorings(DP)
2024-09-22 00:11:15
题目链接: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 1,1 0,1 1,0
状态转移方程就很自然了
dp[i][k][0] = dp[i-1][k][0] + dp[i-1][k][1] +dp[i-1][k][2] + dp[i-1][k-1][3]
dp[i][k][1] = dp[i-1][k-1][0] +dp[i-1][k][1] + dp[i-1][k-2][2] +dp[i-1][k-1][3]
dp[i][k][2] = dp[i-1][k-1][0] + dp[i-1][k-2][1] + dp[i-1][k][2] +dp[i-1][k-1][3]
dp[i][k][3] = (dp[i-1][k-1][0] + dp[i-1][k][1] +dp[i-1][k][2] + dp[i-1][k][3]
代码如下
#include <cstdio>
#include <algorithm>
#define ll long long
#define MOD 998244353
using namespace std; const int maxn = ;
ll dp[maxn][maxn<<][]; int main(int argc, char const *argv[])
{
int n, kl;
scanf("%d%d", &n, &kl);
dp[][][] = ;
dp[][][] = dp[][][] = ;
dp[][][] = ;
for (int i = ; i <= n; i++) {
for (int k = ; k <= (i << ); k++) {
dp[i][k][] = (dp[i-][k][] +
dp[i-][k][] +
dp[i-][k][] +
dp[i-][k-][]) % MOD;
dp[i][k][] = (dp[i-][k-][] +
dp[i-][k][] +
dp[i-][k-][] +
dp[i-][k-][]) % MOD;
dp[i][k][] = (dp[i-][k-][] +
dp[i-][k-][] +
dp[i-][k][] +
dp[i-][k-][]) % MOD;
dp[i][k][] = (dp[i-][k-][] +
dp[i-][k][] +
dp[i-][k][] +
dp[i-][k][]) % MOD;
}
}
printf("%lld\n", (dp[n][kl][] + dp[n][kl][] + dp[n][kl][] + dp[n][kl][]) % MOD);
return ;
}
最新文章
- mybatis返回数据类型为map,值为null的key没返回
- 在线文档预览方案-office web apps续篇
- Symbol not found for architecture arm64 错误
- AngularJs的UI组件ui-Bootstrap分享(十三)——Progressbar
- 如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件
- 【转】GATK使用方法详解(包含bwa使用)
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
- 团队作业7——第二次项目冲刺(Beta版本12.05-12.07)
- Oracle AWR报告详细分析--比较详细
- nginx 499状态码
- bzoj-1179(缩点+最短路)
- 数据传输流程和socket简单操作
- Wechart 饼图
- 『MXNet』第十二弹_再谈新建计算节点
- Hibernate乐观锁无法Catch到org.hibernate.StaleObjectStateException
- java-RAC Oracle 连接字符串
- Dos.ORM - 目录、介绍
- iframe之onload事件小记
- 关于createTextRange和createRange的一些用法【转】
- java程序设计基础篇 复习笔记 第五单元