洛谷题单指南-常见优化技巧-P1714 切蛋糕

news/2024/10/1 12:23:31

原题链接:https://www.luogu.com.cn/problem/P1714

题意解读:求长度不超过m的最大子段和

解题思路:

1、暴力法

设a[N]表示原数组,s[N]是a[N]的前缀和,对于每一个元素s[i],计算其与前m个元素之差,取差值最大值,用代码表示:

for(int i = 1; i <= n; i++)
{for(int j = i - 1; j >= i - m && j >= 0; j--){ans = max(ans, s[i] - s[j]);}
}

76分代码:

#include <bits/stdc++.h>
using namespace std;const int N = 500005;
int n, m;
int a[N], s[N];
int ans = INT_MIN;int main()
{cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i];for(int i = 1; i <= n; i++){for(int j = i - 1; j >= i - m && j >= 0; j--){ans = max(ans, s[i] - s[j]);}}cout << ans;return 0;
}

2、单调队列优化

仔细观察一下暴力法的代码:

此段代码可以改写成:

for(int i = 1; i <= n; i++)
{int minx = INT_MAX;for(int j = i - 1; j >= i - m && j >= 0; j--){minx = min(minx, s[j]);}ans = max(ans, s[i] - minx);
}

进一步观察代码:

红色框部分是要在长度为m的窗口内找最小值,因此可以采用单调队列来优化

100分代码:

#include <bits/stdc++.h>
using namespace std;const int N = 500005;
int n, m;
int a[N], s[N];
int ans = INT_MIN;
int q[N], head = 0, tail = -1;int main()
{cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i];for(int i = 0; i <= n; i++) //需要注意的是,i需要从0开始,这样队列第一个元素可能是0,是为了保证区间和正确:s[r]-s[l-1]{while(head <= tail && i - q[head] > m) head++;while(head <= tail && s[i] <= s[q[tail]]) tail--;ans = max(ans, s[i] - s[q[head]]);q[++tail] = i;}cout << ans;return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【专题】2024年中国折叠屏手机市场与消费趋势研究报告合集PDF分享(附原数据表

原文链接:https://tecdat.cn/?p=37645 中国智能手机市场目前仍处于整体增长瓶颈期,增长复苏未达预期,消费者换机预期周期不断延长,使得行业对破局点的探寻更为紧迫。与此同时,中端消费者购机呈现出消费降级与升级的分化态势,不过更多人会选择体验更好、配置更优的产品以…

Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】

漏洞名称:Apache OFBiz /viewdatafile 代码执行漏洞(CVE-2024-45195) English Name:Apache OFBiz /viewdatafile Code Execution Vulnerability(CVE-2024-45195) CVSS core: 8.0 漏洞描述: Apache OFBiz是一个开源企业资源规划(ERP)系统。它提供了一套企业应用程序,…

navicat无法连接远程的mysql--Host ‘xx.xx.xx.xx‘ is not allowed to connect to this MySQL server“

之前在远程虚拟机上面部署了mysql,想在本地客户端使用navicat连接数据库,结果提示:host xxx is not allowed to connect to this mysql server解决 出现这个提示,是由于我们使用root用户登录时,没有给root用户设置能访问的机器,所以我们设置一下,就可以了。1:登录mysql…

Activity启动模式

Activity启动模式 1. Activity启动模式介绍 1.1 任务栈 在Android开发中,任务栈(Task Stack)是一个非常重要的概念,主要用于管理应用程序中的Activity及其启动模式。它帮助开发者了解当用户在不同应用之间切换,或者应用内部不同Activity之间跳转时,系统如何管理这些Activ…

jQuery中开发插件

页面代码<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script s…

ubuntu 使用命令行查看硬件信息

ubuntu 使用命令行查看硬件信息 CPU cat /proc/cpuinfo其中,model name就显示了cpu的型号,cpu cores显示cpu的所有物理核心数量。 内存 cat /proc/meminfo其中,MemTotal就显示总内存大小,这里为32GB内存,SwapTotal显示了交换分区的内存大小,这里为 2GB。 硬盘大小 df -h可…

易百纳ss928开发板移植自训练模型跑通yolov5算法

ss928平台移植官方yolov5s算法参考文章:https://www.ebaina.com/articles/140000017418,这位大佬也开源了代码,gitee链接:https://gitee.com/apchy_ll/ss928_yolov5s 本文在参考上述文章的基础上,将官方yolov5s模型跑通,验证推理图片正确,然后移植自训练的推理模型,在移…

hyperworks软件许可优化解决方案

Hyperworks软件介绍 Altair 仿真驱动设计改变了产品开发,使工程师能够减少设计迭代和原型测试。提升科学计算能力扩大了应用分析的机会,使大型设计研究能够在限定的项目时间完成。现在,人工智能在工程领域的应用再次改变了产品开发。基于物理场的仿真驱动设计与机器学习相结…