2023牛客暑期多校-J-Qu‘est-ce Que C‘est?(DP)

题意:

给定长度为n的数列{a}_{i=1}^{n},要求每个数都在[-m,m]的范围,且任意长度大于等于2的区间和都大于等于0,问方案数。1\leq n,m\leq 5\times 10_{}^{3}

思路:

首先要看出是dp题,dp[i][x]用来表示遍历到第i位且后缀和最小为x的可行方案数(此时的后缀可以只有最后一位)。很显然j的值在区间[-m,m]。下面考虑dp如何转换:

        1.对于x\epsilon [0,m]。 先讨论dp[i][0]dp[i][0]可由dp[i-1][j],j< 0加一位值为 -j 转换而来;也可由dp[i-1][j],j>=0加一位值为0 转换而来。就有dp[i][0]=\sum_{j=-m}^{m} dp[i-1][j]。再讨论dp[i][1],可由dp[i-1][j],j<0,1-j\leq m,加一位值为 1-j 转换而来;也可由 dp[i-1][j],j>=0加一位值为1转换而来。就有dp[i][1]=\sum_{j=1-m}^{m} dp[i-1][j]。依次讨论可以得出dp[i][x]可以由dp[i-1][j],j< 0,x-j<=m,末位加值为x-j转换而来;也可由dp[i-1][j],j>=0,末位加x转换而来。综上所诉:dp[i][x]=\sum_{j=x-m}^{m} dp[i-1][j]

        2.对于x\epsilon [-m,0)。可以去验证,只有dp[i-1][j],j>=-x,末位加值为x才能转换成dp[i][x]。所以dp[i][x]=\sum_{j=-x}^{m}dp[i-1][j]

为了方便计算我们把[-m,m]这个区间平移映射到[0,2m]区间上。按照上述思想去找新的dp转换式就有:

dp[i][x]=\sum_{j=x-m}^{2m}dp[i-1][j],x\varepsilon [m,2m]

dp[i][x]=\sum_{j=2m-x}^{2m}dp[i-1][j],x\epsilon [0,m)

由于都是求和到2m,所以可以考虑后缀和优化。

代码:

//#define _CRT_SECURE_NO_WARNINGS 
//#include<iostream>
//#include<algorithm>
//#include<cstdio>
//#include<map>
//#include<string.h>
//#include<string>
//#include<vector>
//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod = 998244353;
const int N = 5005;
ll dp[N][N*2];//dp[i][j]表示遍历到i位,后缀和最小为j且合法的数量。(这里后缀和包含了只含有最后一位的情况)
ll sum[N * 2];//后缀数组
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n, m;cin >> n >> m;ll ans = 0;//初始化for (int i = 0; i <= m*2; i++){dp[1][i] = 1;}for (int i = 2; i <= n; i++){//处理后缀和for (int j = m * 2; j >= 0; j--)sum[j] = (sum[j + 1] + dp[i - 1][j]) % mod;//[0,m)的情况for (int j = 0; j < m; j++){dp[i][j] = sum[2 * m - j];}//[m,2m]的情况for (int j = m; j <= 2 * m; j++){dp[i][j] = sum[j - m];}}//统计for (int i = 0; i <= m * 2; i++){ans = (ans + dp[n][i]) % mod;}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT技术面试必备:如何做好IT类技术面试?

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精通》数据库是开发者必会基础之…

oracle建立自动增长字段

oracle数据库与其他的数据库不太一样&#xff0c;比如在mysql里自动增长只要设定“auto_increment”即可。可是在oracle里就没有这种配置了。以oracle11g为例&#xff0c;建立自动增长的字段。操作如下&#xff1a; --创建表 create table USERINFO ( ID NUMBER , …

【Linux】多线程的补充

1 线程安全的单例模式 1.1 什么是单例模式 单例模式是一种 "经典的, 常用的, 常考的" 设计模式. 1.2 什么是设计模式 IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些…

开发经验分享之:import引入包和@Autowired注入类有什么区别

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 import 和 Autowired 想必大家在 Java 开发中使用频率最多的关键字之一了把&#xff0c;这篇博客将解释这两个概念的区别和作用&#xff0c;帮助你更好地理解它们在Ja…

如何开发一套苹果cms前端模板

本文运用了苹果cms官网的模板开发教程&#xff0c;开发了一套苹果cms的前端模板&#xff0c;感兴趣的同学可以去github下载使用。 什么是模板 模板是网站的主题外观&#xff0c;也被称为主题或皮肤。通过使用不同的模板&#xff0c;网站的前台可以以不同的样式展示。这就像人们…

04-导数判断凹(concave)凸(convex)性_导数用于泰勒展开

导数与函数凹凸性的关系 函数的二阶导数是和函数的凹凸性是有关系的&#xff0c;凹凸性怎么定义的&#xff1f; 先来做简单的回顾&#xff0c;更多的会在最优化方法里面给大家讲&#xff0c;这里先记住凸函数是向下凸的&#xff0c; 反正就是凹的&#xff0c;是否是凸函数可以…

秒级体验本地调试远程 k8s 中的服务

点击上方蓝色字体&#xff0c;选择“设为星标” 回复”云原生“获取基础架构实践 背景 在这个以k8s为云os的时代&#xff0c;程序员在日常的开发过程中&#xff0c;肯定会遇到各种问题&#xff0c;比如&#xff1a;本地开发完&#xff0c;需要部署到远程k8s集群&#xff0c;本地…

【设计模式】详解观察者模式

文章目录 1、简介2、观察者模式简单实现抽象主题&#xff08;Subject&#xff09;具体主题&#xff08;ConcreteSubject&#xff09;抽象观察者&#xff08;Observer&#xff09;具体观察者&#xff08;ConcrereObserver&#xff09;测试&#xff1a; 观察者设计模式优缺点观察…

01Mysql查询语句题型总结

#第三章 SELECT课后练习 # 1.查询员工12个月的工资总和&#xff0c;并起别名为ANNUAL SALARY SELECT employee_id,last_name,salary * 12 "ANNUAL SALARY" FROM employees; #加奖金的情况 SELECT employee_id,last_name,salary * 12 *(1 IFNULL(commission_pct,0)) …

音视频(关于视频的封装,由mp4->mov)

(20条消息) FFmpeg Visual studio 开发环境搭建_HW140701的博客-CSDN博客 1.封装格式&#xff1a;AVI&#xff0c;MP4&#xff0c;ASF AVI&#xff1a;压缩标准可以任意选 FLV,ts:直播等使用的流媒体 mp4:既是封装又是压缩 #pragma comment(lib,"avcodec.lib") …

十八章:用于弱监督语义分割的自监督等变注意力机制

0.摘要 图像级弱监督语义分割是一个具有挑战性的问题&#xff0c;近年来得到了深入研究。大多数先进的解决方案利用类激活图&#xff08;CAM&#xff09;。然而&#xff0c;由于全监督和弱监督之间存在差距&#xff0c;CAM几乎无法用作对象掩码。在本文中&#xff0c;我们提出了…

深度优先搜索|79, 695,212

深度优先搜索|79. 单词搜索, 695. 岛屿的最大面积, 212. 单词搜索 II 单词搜索岛屿的最大面积单词搜索II 单词搜索 用的是深度优先搜索&#xff0c;这种判断类型的回溯我就一直不知道要怎么回退&#xff0c;然后勉强写了一个。 这里还有一个注意事项就是&#xff0c;走到最后一…

[JAVAee]定时器

目录 定时器的含义 定时器的使用 定时器的解析 ①TaskQueue ​②TimerThread ③Timer 定时器的模拟实现 ①创建Task自定义类型 ②创建TimerThread类 ③Timer类 完整代码 定时器的含义 从名字上看,就是我们通俗理解的那个定时器.设置一定的时间,并在一定的时间后发生…

安卓抓包神奇黄鸟HttpCanary安装配置及使用教程

1、下载安装包 黄鸟抓包下载地址 2、安装下载的apk 3、证书安装问题 vivo手机我安装时打开黄鸟app&#xff0c;会直接弹出&#xff0c;直接安装即可 其他手机&#xff0c;需要去系统设置中安装 3.1 搜索 证书&#xff0c;选择CA证书 3.2 进行本人操作验证 3.3 安装HttpCa…

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

在 PingCAP 用户峰会 2023 上&#xff0c; PingCAP 联合创始人兼 CTO 黄东旭 分享了“The Future of Database”为主题的演讲&#xff0c; 介绍了 TiDB Serverless 作为未来一代数据库的核心设计理念。黄东旭 通过分享个人经历和示例&#xff0c;强调了数据库的服务化而非服务化…

WPF实战学习笔记24-首页编辑与完成

首页编辑与完成 indexview添加Listbox控件的鼠标双击行为 添加todo、memo的编辑命令indexviewmodel添加对应的更新事件处理 添加ToggleButton与后台的绑定 将ToggleButton的ischeck绑定到status属性添加bool int 转换器添加完成命令添加完成功能函数 Listbox添加行为 给行为…

C语言假期作业 DAY 01

题目 1.选择题 1、执行下面程序&#xff0c;正确的输出是&#xff08; &#xff09; int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n"&#xff0c;x, y)…

Android Studio 代码模板插件实现

Android Studio 代码模板插件 背景 可以跳过背景和简述&#xff0c;从模板插件实现开始看. 开发新页面时&#xff0c;原先需要写一堆模板代码。比如用Databinding写列表结构的页面&#xff0c;需要手写以下文件&#xff1a; XxActivity.ktXxFragment.ktXxViewModel.ktXxListA…

一、SpringBoot基础[日志]

一、日志 解释&#xff1a;SpringBoot使用logback作为默认的日志框架&#xff0c;其中还可以导入log4j2等优秀的日志框架 1.修改日志内容 修改整个日志格式&#xff1a;logging.pattern.console%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{15} 你好 %msg%n %d{yyy…

基于K8s环境·使用ArgoCD部署Jenkins和静态Agent节点

今天是「DevOps云学堂」与你共同进步的第 47天 第⑦期DevOps实战训练营 7月15日已开营 实践环境升级基于K8s和ArgoCD 本文节选自第⑦期DevOps训练营 &#xff0c; 对于训练营的同学实践此文档依赖于基础环境配置文档&#xff0c; 运行K8s集群并配置NFS存储。实际上只要有个K8s集…