[ABC253E] Distance Sequence(线性dp且利用前缀和进行优化)

news/2024/10/24 4:20:18/

在这里插入图片描述

思路:根据数据范围还有题目所处的位置我们可以联想到该题可以用dp来求解,我们设dp[i][j]代表第i个数为j时的方案数,dp[i][j]应为dp[i - 1][t] (t <= j - k) 和dp[i - 1][j + k]转移过来,如果我们不做任何优化的话n* m * n是肯定超时的,因此我们可以利用前缀和来求解两段的方案数,对于前缀和当n等于1时我们是可以确定地sum[i] = sum[i - 1] + 1,但是题目中k可以为0,当k等于0时左右两段是有重复点地,因此我们只需要计算一次即可,最终是求地总的方案数因此我们直接输出sum[m]即可,转换着求也挺难想地,而不是直接由dp求出,下面给出AC代码:

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
const int M = 1e9 + 7;
const int MOD = 998244353;
typedef long long ll;
typedef pair<ll,ll>PII;
typedef pair<char, int>PCI;ll n, m, k;ll dp[1010][5050];//第i个数为j的总的方案数
ll sum[N];
//dp[i][j] = dp[i - 1][j] + pre[j - k] + pre[m] - pre[j + k - 1];//后缀用总的 - 前缀
int main()
{cin >> n >> m >> k;for(int i = 1; i <= m; i ++){sum[i] = sum[i - 1] + 1;} //初始化本身也是一个for(int i = 2; i <= n; i ++){for(int j = 1; j <= m; j ++){if(j + k <= m){dp[i][j] = (dp[i][j] + ((sum[m] - sum[j + k - 1]) % MOD + MOD) % MOD) % MOD;}//用前缀和在dp过程中来优化是真的不好想if(j - k >= 1){if(k == 0){dp[i][j] = (dp[i][j] + sum[j - k - 1] % MOD) % MOD;}//等于0时左右两段就会有重复deelse {dp[i][j] = (dp[i][j] + sum[j - k] % MOD) % MOD;}}}//预处理前缀和memset(sum, 0, sizeof sum);for(int j = 1; j <= m; j ++){sum[j] = (sum[j - 1] + dp[i][j]) % MOD;}}cout << sum[m] % MOD << endl;return 0;
}	

http://www.ppmy.cn/news/1541513.html

相关文章

【个人同步与备份】电脑(Windows)与手机/平板(Android)之间文件同步

文章目录 1. syncthing软件下载2. syncthing的使用2.1. 添加设备2.1.1. syncthing具备设备发现功能&#xff0c;因此安装好软件&#xff0c;只需确认设备信息是否对应即可2.1.2. 如果没有发现到&#xff0c;可以通过设备ID连接2.1.3. 设置GUI身份验证用户&#xff0c;让无关设备…

python装饰器property的使用

使用 Python 的 property 装饰器管理类属性 在 Python 中&#xff0c;property 装饰器是一个非常有用的工具&#xff0c;它允许我们将一个方法转换为属性调用。这样&#xff0c;我们就可以像访问对象的属性一样来调用该方法&#xff0c;而不需要使用括号。这通常用于封装数据&…

w~自动驾驶合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/12320882 #自动驾驶数据集全面调研 自动驾驶技术在硬件和深度学习方法的最新进展中迅速发展&#xff0c;并展现出令人期待的性能。高质量的数据集对于开发可靠的自动驾驶算法至关重要。先前的数据集调研试图回顾这些数据集&…

【iOS】YYModel

目录 什么是YYModel &#xff1f; 如何使用YYModel &#xff1f; 最简单的Model 与网络请求结合 属性为容器类的Model 白名单和黑名单 Model的嵌套 结语 什么是YYModel &#xff1f; YYModel是一个用于 iOS 和 macOS 开发的高性能的模型框架&#xff0c;主要用于对象和…

Redis的Bin目录文件及常用命令

Redis的Bin目录文件 全局命令Redis键/KeyRedis字符串&#xff08;String&#xff09;Redis 哈希(Hash)Redis 列表(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis的位图&#xff08;Bitmap&#xff09;Redis HyperLogLogRedis GEOGeoHash编码方式Base32编码标准Base32编…

什么是凸二次规划问题

我们从凸二次规划的基本概念出发&#xff0c;然后解释它与支持向量机的关系。 一、凸二次规划问题的详细介绍 凸二次规划问题是优化问题的一类&#xff0c;目标是最小化一个凸的二次函数&#xff0c;受一组线性约束的限制。凸二次规划是一类特殊的二次规划问题&#xff0c;其…

【存储设备专栏 2.2 -- linux 下 fdisk -l 命令详细介绍2 】

文章目录 实例详解 fdisk -l第一部分&#xff1a;磁盘 /dev/sda详细解释&#xff1a; 第二部分&#xff1a;环回设备 /dev/loop8详细解释&#xff1a; 总结 实例详解 fdisk -l 在 Linux 系统中执行 fdisk -l 命令会输出详细的磁盘和分区信息。下面我们具体解释一下下面的log每…

嵌套div导致子区域margin失效问题解决

嵌套div导致子区域margin失效问题解决 现象原因解决方法 现象 <div class"prev"></div> <div class"parent"><div class"child"></div><div class"child"></div> </div> <div cl…