当前位置: 首页 > news >正文

【PAT甲级题解记录】1007 Maximum Subsequence Sum (25 分)

【PAT甲级题解记录】1007 Maximum Subsequence Sum (25 分)

前言

Problem:1007 Maximum Subsequence Sum (25 分)

Tags:DP

Difficulty:剧情模式 想流点汗 想流点血 死而无憾

Address:1007 Maximum Subsequence Sum (25 分)

问题描述

求最大连续子序列和,输出这个连续子序列的首值、尾值和序列和(优先最靠前的),如果都为这个序列都为负的输出0和整个序列的首尾值。

解题思路

  1. 一道经典又特殊的动态规划,本身很简单,但考虑到要求最靠前的首尾值,容易出错,难度相应提高。
  2. dp[i]dp[i]dp[i] 表示以 N[i]N[i]N[i] 为结尾的最大连续子序列和,再用一个 pos[i]pos[i]pos[i] 表示这个子序列的首位置。
  3. 优化:由于dp访问的单调性,可以压缩空间,用一个dp值和pos值代替这俩个数组。

参考代码

1. 未压缩空间:

#include<iostream>
#include<vector>using namespace std;
int K; // K integers  1e4
vector<int> N;
vector<int> dp, start_index;
int maxi;void init() {cin >> K;N.resize(K, 0);dp.resize(K, 0);start_index.resize(K, 0);for (int i = 0; i < K; ++i) {cin >> N[i];}}void do_dp() {maxi = 0;dp[0] = N[0];start_index[0] = 0;for (int i = 1; i < K; i++) {if (dp[i - 1] >= 0) {dp[i] = dp[i - 1] + N[i];start_index[i] = start_index[i - 1];} else {dp[i] = N[i];start_index[i] = i;}maxi = dp[i] > dp[maxi] ? i : maxi;}
}void solution_1007() {init();do_dp();if (dp[maxi] < 0) {cout << 0 << " " << N[0] << " " << N[K - 1] << endl;return;}cout << dp[maxi] << " " << N[start_index[maxi]] << " " << N[maxi] << endl;
}
int main() {solution_1007();return 0;
}

2. 压缩空间:

(参考柳神 https://github.com/liuchuo/PAT/tree/master/AdvancedLevel_C++ )

这么写后竟然奇妙的发现当所有值都是负的时 leftindex 、rightindex会保持初始值,总而言之精简了很多,膜拜 orz。

#include<iostream>
#include<vector>using namespace std;
int K; // K integers  1e4
vector<int> N;
int dp, temp_start_index, left_index, right_index;
int maxx;void init() {cin >> K;N.resize(K, 0);for (int i = 0; i < K; ++i) {cin >> N[i];}}
void do_dp() {maxx = -1;dp = 0;temp_start_index = 0;left_index = 0;right_index = K - 1;for (int i = 0; i < K; i++) {// 注意从上一个循环继承来的 dp 值永远不会小于0,给原 dp 值加上 N[i] 后再判断dp = dp + N[i];if (dp < 0) {  // 加上 N[i] 后 dp 小于0了,只可能因为 N[i] 为负数dp = 0;temp_start_index = i + 1;} else if (dp > maxx) { // 获得更大子串和maxx = dp;left_index = temp_start_index;right_index = i;}}
}void solution_1007() {init();do_dp();if (maxx < 0) {maxx = 0;}cout << maxx << " " << N[left_index] << " " << N[right_index] << endl;
}
int main() {solution_1007();return 0;
}

总结

对于这种会保存下标的题,coding时不要分心写错了,一开始把 pos_start[i] = i 写成了 pos_start[i] = N[i],由于样例能过检查了好久才找出来(情人节不适合code)。

相关文章:

【PAT甲级题解记录】1007 Maximum Subsequence Sum (25 分)

【PAT甲级题解记录】1007 Maximum Subsequence Sum (25 分) 前言 Problem&#xff1a;1007 Maximum Subsequence Sum (25 分) Tags&#xff1a;DP Difficulty&#xff1a;剧情模式 想流点汗 想流点血 死而无憾 Address&#xff1a;1007 Maximum Subsequence Sum (25 分) 问题描…...

华为OD机试真题Python实现【 最小叶子节点】真题+解题思路+代码(20222023)

最小叶子节点 题目 二叉树也可以用数组来存储, 给定一个数组,树的根节点的值储存在下标1, 对于储存在下标n的节点,他的左子节点和右子节点分别储存在下标2*n和2*n+1, 并且我们用-1代表一个节点为空, 给定一个数组存储的二叉树, 试求从根节点到最小的叶子节点的路径, …...

mars3d动态轨迹DynamicRoamLine,如何获取实时运⾏的经纬度

问题 1.期望 实现 实时显示经纬度、⾼度&#xff0c;做电⼦围栏报警判断 2.第⼀步就是要&#xff0c;获取实时运⾏的经纬度信息、⾼度信息&#xff0c;然后通过算法做电⼦围栏判断 3.使⽤了参数getOverPositions&#xff0c;发现返回的不是经纬度 相关链接 http://mars3d.cn//e…...

jvm常识

Jvm工作原理学习笔记0126一、JVM的生命周期1.JVM实例对应了一个独立运行的java程序它是进程级别a)启动。启动一个Java程序时&#xff0c;一个JVM实例就产生了&#xff0c;任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点b)运行。ma…...

PHP部署、nginx与PHP的整合、PHP动态添加模块

文章目录前言一、基本知识1.php介绍2.PHP能做什么3.web工作原理4.PHP脚本主要用于领域5.php其他相关信息6.memcache介绍二、php的源码安装1.php安装2.php配置三、nginx与php整合四、php动态扩展模块&#xff08;memcache模块&#xff09;前言 一、基本知识 1.php介绍 官方下载…...

SpringCloud与SpringBoot的版本对应

一、SpringCloud与SpringBoot的版本对应 SpringCloud版本 SpringBoot版本 2021.0.1-SNAPSHOT Spring Boot >2.6.4-SNAPSHOT and <2.7.0-M1 2021.0.0 Spring Boot >2.6.1 and <2.6.4-SNAPSHOT 2021.0.0-RC1 Spring Boot >2.6.0-RC1 and <2.6.1 2021.0.0-M3 Sp…...

华为OD机试题,用 Java 解【N 进制减法】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

Linux->进程概念于基本创建

1. 进程基本概念 当一个可执行程序被加载到内存当中&#xff0c;并由操作系统将其管理起来&#xff0c;此时这个程序就被称之为进程。也就是下方的&#xff1a; 程序的一个执行实例&#xff0c;正在执行的程序等 担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff…...

【MySQL】5.7版本解压安装配置

前言 之所以使用解压版本&#xff0c;而不使用exe安装&#xff0c;因为exe的安装方式删除过于麻烦&#xff01;&#xff01;&#xff01; 如果安装MySQL过程中&#xff0c;出错了或者想重新在来一把&#xff0c;删除mysql服务即可 sc delete mysql # 删除已经安装好的Mysql&a…...

c++类对象数据成员和虚函数的内存布局

一直想搞清楚类对象的数据成员和虚函数的内存布局&#xff0c;今天刚好有时间&#xff0c;所以就写了个demo查看了一下具体的内存布局情况&#xff08;使用的编译器为微软的&#xff09;。下面是自己demo的代码&#xff1a;#include <iostream> #include <windows.h&g…...

Python 模块和包

1. 模块和包 **容器&#xff1a;**列表、元组、字符串、字典等&#xff0c;对数据的封装**函数&#xff1a;**对语句的封装**类&#xff1a;**对方法和属性的封装&#xff0c;即对函数和数据的封装 而模块&#xff08;module&#xff09;就是个程序&#xff0c;一个.py 文件&…...

Java零基础专栏——面向对象

1 面向对象思想1.1 什么是面向对象&#xff1f;2 类和对象2.1 类和对象的理解2.2 类的定义2.3定义类的补充注意事项2.4 对象的使用2.5 练习3 封装3.1 封装思想3.1.1 封装概述3.1.2 封装的步骤3.1.3 封装代码实现3.2 private关键字3.3 练习—private的使用4 构造方法4.1 构造方法…...

离散无记忆与有记忆信源的序列熵

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;information-theory】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 信息论 也可获取。 文章目录离散无记忆信源的…...

算法该不该刷?如何高效刷算法?

一、算法该不该刷&#xff1f;最近有小伙伴向我咨询一个问题&#xff0c;就是算法该不该刷&#xff0c;该如何刷算法呢&#xff1f;这个问题可谓太大众化了&#xff0c;只要你去某乎、某度搜索一下相关的解答&#xff0c;会有无数种回答&#xff0c;可见这个问题困扰了多少学习…...

Allegro如何在关闭飞线模式下查看网络连接位置操作指导

Allegro如何在关闭飞线模式下查看网络连接位置操作指导 在用Allegro做PCB设计的时候,有时会因为设计需要,关闭飞线显示。 如何在关闭飞线显示模式下查看网络连接的位置,如下图 除了能看到网络连接的点位以外,还能看到器件的pin Number 如何显示出这种效果,具体操作如下 …...

啊哈 算法读书笔记 第 1 章 一大波数正在靠近——排序

目录 排序算法&#xff1a; 时间复杂度&#xff1a; 排序算法和冒泡排序之间的过渡&#xff1a; 冒泡排序 冒泡排序和快速排序之间的过渡&#xff1a; 快速排序 排序算法&#xff1a; 首先出场的是我们的主人公小哼&#xff0c;上面这个可爱的娃就是啦。期末考试完了老…...

Servlet笔记(5):HTTP请求与响应

1、HTTP请求 当浏览器请求网页时&#xff0c;它会向Web服务器发送特定信息&#xff0c;这些信息不能被直接读取&#xff0c;而是通过传输HTTP请求时&#xff0c;封装进请求头中。 有哪些头信息&#xff1f; 头信息描述Accept这个头信息指定浏览器或其他客户端可以处理的 MIME…...

信号的运算与变换

目录 前言 本章内容介绍 信号的运算与变换 相加 相乘 时移 反折 尺度变换 微分&#xff08;差分&#xff09; 积分&#xff08;累加&#xff09; 信号的奇偶求解 信号的实虚分解 合适的例题 1、时移反折 2、时移尺度 3、时移反折尺度 4、反求x(t) 前言 《信号…...

【GO】K8s 管理系统项目9[API部分--Secret]

K8s 管理系统项目[API部分–Secret] 1. 接口实现 service/dataselector.go // secret type secretCell corev1.Secretfunc (s secretCell) GetCreation() time.Time {return s.CreationTimestamp.Time }func (s secretCell) GetName() string {return s.Name }2. Secret功能…...

ESP32 Arduino EspNow点对点双向通讯

ESP32 Arduino EspNow点对点双向通讯✨本案例分别采用esp32和esp32C3之间点对点单播无线通讯方式。 &#x1f33f;esp32开发板 &#x1f33e;esp32c3开发板 &#x1f527;所需库(需要自行导入到Arduino IDE library文件夹中&#xff0c;无法在IDE 管理库界面搜索下载到该库)&am…...

保姆级教程:在Linux上用Flume 1.7.0 + Spark 2.4.7搭建实时日志流处理管道

企业级实时日志处理实战&#xff1a;Flume 1.7.0与Spark 2.4.7深度整合指南 在当今数据驱动的商业环境中&#xff0c;实时日志处理能力已成为企业技术栈的核心竞争力。想象一下电商大促期间每秒数万条的用户行为日志&#xff0c;或是金融交易系统中毫秒级延迟的风控信号处理——…...

新手福音:在快马平台体验vscode codex式辅助,轻松写出第一行代码

最近在学编程&#xff0c;发现很多新手&#xff08;包括我自己&#xff09;最头疼的就是面对空白的编辑器不知道从哪下手。传统的学习方式要么是直接看教程照抄代码&#xff0c;要么是硬啃文档记语法&#xff0c;很容易劝退。直到我发现了InsCode(快马)平台的智能辅助功能&…...

前端实战:动态修改SVG图片颜色的5种高效方法

1. 为什么需要动态修改SVG颜色&#xff1f; 在Web开发中&#xff0c;SVG&#xff08;可缩放矢量图形&#xff09;已经成为不可或缺的一部分。相比传统的位图格式&#xff0c;SVG具有无限缩放不失真、文件体积小、支持交互和动画等优势。但最让我惊喜的是它的可编程性 - 我们可…...

车轨桥刚柔耦合仿真与 Simpack 与 Abaqus 联合仿真那些事儿

1.simpack与abaqus联合仿真教程 2.车轨桥刚柔耦合仿真教程&#xff0c;柔性钢轨建模&#xff0c;fbi文件生成&#xff0c;ftr文件书写 3.包括模型在工程仿真领域&#xff0c;车轨桥刚柔耦合仿真以及 Simpack 与 Abaqus 联合仿真都是极具实用价值的技术&#xff0c;今天就来给大…...

3步打造个人数字时光机:GetQzonehistory备份QQ空间全攻略

3步打造个人数字时光机&#xff1a;GetQzonehistory备份QQ空间全攻略 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间里承载青春记忆的说说突然消失&#xff1f;GetQ…...

N_m3u8DL-RE:跨平台流媒体解决方案的全方位技术指南

N_m3u8DL-RE&#xff1a;跨平台流媒体解决方案的全方位技术指南 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE …...

BililiveRecorder:专业直播内容保存解决方案

BililiveRecorder&#xff1a;专业直播内容保存解决方案 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 在数字内容快速迭代的时代&#xff0c;如何永久保存有价值的直播内容成为许多创…...

【APS合集】20余份APS生产排成系统及与其他系统集成方案合集(PPT+WORD)

本方案面向“十五五”构建以约束优化算法为核心的APS智能排程系统&#xff0c;通过集成ERP、MES、SCADA及WMS&#xff0c;实现计划-执行闭环联动。旨在解决人工排产低效、资源冲突频发等痛点&#xff0c;支持分钟级动态重排与交期精准承诺&#xff0c;显著提升设备利用率与订单…...

代码随想录算法训练营第二天 | Leetcode 209.长度最小的子数组 | Leetcode 59.螺旋矩阵 II | 区间和 | 开发商购买土地

209.长度最小的子数组 力扣题目链接&#xff1a;209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09;文档讲解&#xff1a;209.长度最小的子数组 | 滑动窗口 | 连续子数组 | 代码随想录视频讲解&#xff1a;拿下滑动窗口&#xff01; | LeetCode 209 长度最小的子数…...

终极指南:如何使用Rust构建企业级数据脱敏系统

终极指南&#xff1a;如何使用Rust构建企业级数据脱敏系统 在当今数据驱动的时代&#xff0c;企业面临着日益严格的隐私保护法规和数据安全挑战。数据脱敏作为保护敏感信息的关键技术&#xff0c;正成为企业数据治理的核心环节。本文将详细介绍如何利用Rust这一安全高效的系统编…...