【题解 单调队列优化dp】 简单的加法乘法计算题

2023-10-25 09:12

本文主要是介绍【题解 单调队列优化dp】 简单的加法乘法计算题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

在这里插入图片描述


分析:

由于对于每一步而言,我们都需要的是最小步数
所以我们很显然的可以写出一个dp方程:
f [ i ] f[i] f[i]表示达到i时的最小步数
我们有两种操作,也就是说我们可以通过一下两种方式转移过来:
f [ i ] = m i n ( f [ i − 1 ] , f [ i − 2 ] … … , f [ i − n ] + 1 ) f[i] = min(f[i-1],f[i-2]……,f[i-n]+1) f[i]=min(f[i1],f[i2]……,f[in]+1)
f [ i ] = m i n ( f [ i / a [ j ] ] + 1 , f [ i ] ) f[i]=min(f[i/a[j]]+1,f[i]) f[i]=min(f[i/a[j]]+1,f[i])

对于第二种方式,由于m最大只有10,所以我们可以暴力转移
那么对于第一种方式,我们发现这是一段长度固定区间里的最小值
我们可以考虑滑动窗口,即单调队列去优化dp
线段树常数太大,会t,不建议使用


Code

#include<bits/stdc++.h>
using namespace std;const int N = 5e6+100;int y,n,m;
int q[N],h,t;
int a[N],f[N];int main(){scanf("%d %d %d",&y,&n,&m);for (int i = 1; i <= m; i++) scanf("%d",&a[i]);f[0] = 0;for (int i = 1; i <= n; i++) f[i] = 1;t = 0 , h = 1;for (int i = 1; i <= n; i++){while (f[q[t]] > f[i] && h<=t) t--;q[++t] = i;}for (int i = n+1; i <= y; i++){while (i-q[h] > n && h<=t) h++;f[i] = f[q[h]]+1;for (int j = 1; j <= m; j++)if (i%a[j] == 0) f[i] = min(f[i],f[i/a[j]]+1);while (f[q[t]] > f[i] && h<=t) t--;q[++t] = i;}cout<<f[y];return 0;
}

这篇关于【题解 单调队列优化dp】 简单的加法乘法计算题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/281544

相关文章

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time