A - Mio visits ACGN Exhibition

借鉴了:https://blog.csdn.net/qq_63010655/article/details/123699263
并做了些许优化

dp[i][j][k]来表示 到第i行第j列,经过了k个0的所有路径数。
又可以用0和1两个状态来优化i
妙啊,orz

AC代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define r0 return 0
#define endl "\n"
#define pii pair<int,int>
#define inf 0x3f3f3f3f
const int N = 2e5 + 5;
int g[505][505];
ll dp[2][505][10005];
const int mod = 998244353;
int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int n, m, sum0, sum1;cin >> n >> m >> sum0 >> sum1;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> g[i][j];if (g[1][1] == 1) dp[1][1][0] = 1; // 初始化,默认第一行是1else if (g[1][1] == 0) dp[1][1][1] = 1; // 第三维表示0的个数 ,整体表示路径的个数int s = 1; //用s来优化行,每一行只需要不一样就可以了所以用0和1来表示.// 默认第一行是1for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){if (i == 1 && j == 1) continue;for (int k = 0; k <= i + j - 1; k++){if (g[i][j] == 0){ if (k == 0) dp[s][j][k] = 0; //这里记得赋值,因为必须覆盖掉上一行的elsedp[s][j][k] = (dp[s ^ 1][j][k - 1] + dp[s][j - 1][k - 1])%mod;}else{dp[s][j][k] = (dp[s ^ 1][j][k] + dp[s][j - 1][k])%mod;}}}s ^= 1; // 换行}s ^= 1; // 多换了一次,换回来int ans = 0;for (int k = sum0; n + m - 1 - k >= sum1; k++){ans = (ans + dp[s][m][k]) % mod;}cout << ans << endl;r0;
}

A - Mio visits ACGN Exhibition(dp)相关推荐

  1. A.Mio visits ACGN Exhibition

    传送门 题意:该题目的目的是让你求方案数,求方案数的问题其实我们就可以很容易想到动态规划了,因为求方案数一般来说是满足动态规划的两个条件(最优子结构,无后效性). 那么我们如何考虑状态呢,我们的状态必 ...

  2. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  3. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  4. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  5. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  6. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  7. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  8. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  9. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

最新文章

  1. 如何在windows server 2008 AD中禁用USB端口(转庐阳侠们博客)
  2. mysql datetime 默认值_老大让我整理下公司内部MySQL使用规范,分享给大家
  3. 浮点数c语言,C语言浮点数运算
  4. YOLOv3: 训练自己的数据(绝对经典版本1)
  5. python根据一个基类生成派生类_将基类转换为派生类python(或者更像pythonic的扩展类的方式)...
  6. [云炬ThinkPython阅读笔记]2.7 注释
  7. android模拟器EditText 不能用物理键盘输入,也不能用电脑键盘输入
  8. python字符串的美化_Python构造自定义方法来美化字典结构输出
  9. 源码群友问:你这么多项目是怎么进行技术选型的?
  10. 服务器购买和远程连接
  11. 乐优商城(04)--商品规格
  12. Matlab中max函数详解
  13. excel公式里用html,Excel公式中{}是什么意思?要如何用?
  14. Linux里面的进程管理
  15. Linux运维大牛带你认识真正 Linux 系统结构!超强入门技术文!
  16. 自动驾驶研究生就业如何,自动驾驶的研究方向
  17. 某公司HP-EVA4400存储硬盘离线的数据恢复方法和数据恢复过程
  18. 估值指标二把手——市净率
  19. arduinouno组装无人机_Arduino UNO四自由度机械臂制作
  20. 翻越山丘:中国科技公司面对GDPR的这两年

热门文章

  1. 异构计算平台(1)--了解
  2. 腾讯传奇霸业 服务器维护时间表,传奇霸业
  3. 小程序Mpx框架入门
  4. nutui框架小程序配置
  5. vue项目引入jquery
  6. Typora语法详解(一)
  7. Redis 大厂面试题总结(2023最新版)
  8. 服务器 显示w3wp.exe,关于windows2008+IIS7服务器中W3wp.exe问题
  9. SSL证书七大常见错误及解决方法
  10. 国产蓝牙耳机品牌之好口碑,平价好用蓝牙耳机点评