1007 Maximum Subsequence Sum

news2025/1/18 20:11:18

Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni+1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.

Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.

Input Specification:

Each input file contains one test case. Each case occupies two lines. The first line contains a positive integer K (≤10000). The second line contains K numbers, separated by a space.

Output Specification:

For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

Sample Input:

10
-10 1 2 3 4 -5 -23 3 7 -21

Sample Output:

10 1 4
#include<iostream>
using namespace std;
const int maxn = 10010;
int a[maxn], b[maxn];
int dp[maxn];
int main(){
    int n;
    cin >> n;
    bool flag = false;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        if (a[i] >= 0)
            flag = true;
    }
    if (flag == false) {
        cout << 0 << " " << a[0] << " "<< a[n - 1] <<endl;
        return 0;
    }
    dp[0] = a[0];
    b[0] = 0;
    for (int i = 1; i < n; i++) {
        if (dp[i - 1] >= 0) {
            dp[i] = dp[i - 1] + a[i];
            b[i] = b[i - 1];
        }
        else{
            dp[i] = a[i];
            b[i] = i;
        }
    }
    int k = 0;
    for (int i = 0; i < n; i++) {
        if (dp[i] > dp[k])
            k = i;
    }
    cout << dp[k] << " " << a[b[k]] << " " << a[k] << endl;
    return 0;
}

本题思路:

用数组a来保存输入的序列,b【i】表示以啊【i】作为结尾的最大连续子序列是从哪个元素开始的(记录下标),dp【i】表示以a【i】作为结尾元素的最大连续子序列和,只有两种情况,第一种:连续序列只有一个元素,即a【i】(a【i】<0时),第二种情况,dp【i-1】+a【i】(a【i】>=0时)。

拓展:

#include<iostream>
using namespace std;
const int maxn = 10010;
int a[maxn], b[maxn][2];
int dp[maxn];
int main(){
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    dp[0] = a[0];
    b[0][0] = 0, b[0][1] = 0;
    for (int i = 1; i < n; i++) {
        if (dp[i - 1] >= 0) {
            dp[i] = dp[i - 1] + a[i];
            b[i][0] = b[i - 1][0];
            b[i][1] = i;
        }
        else{
            dp[i] = a[i];
            b[i][0] = i;
            b[i][1] = i;
        }
    }
    int k = 0;
    for (int i = 0; i < n; i++) {
        if (dp[i] > dp[k])
            k = i;
    }
    cout << dp[k] << " " << b[k][0]<< " " << b[k][1]<< endl;
    return 0;
}

这是求最大子序列的开始和结束下标(从0开始)。

 

 

 

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

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

相关文章

电商数据采集和分析

什么是电商数据采集&#xff1f; 数据采集一般是指利用人工或者爬虫技术&#xff0c;对电商平台上的公开数据进行抓取采集&#xff0c;采集完成后&#xff0c;去除客户不需要的无关的杂质数据&#xff0c;再进行交付。 电商数据采集要注意哪些点&#xff1f; 首先是采集平台&…

vue 简单实验 自定义组件 局部注册

1.概要 2.代码 <html> </html> <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <body><div id"counter"><component-a></component-a></div> </body&g…

【方案】安防监控EasyCVR智慧工地视频监管风险预警平台的应用

智慧工地方案是一种结合现代化技术与工地管理实践的创新型解决方案。它通过实时监控、数据分析、人工智能等技术手段&#xff0c;使工地管理更加高效、智能化。在建设智慧工地的过程中&#xff0c;除了上述提到的利用物联网技术实现设备互联、数据采集及分析以外&#xff0c;还…

快捷支付和网上支付、协议支付都有哪些区别?

协议支付是指客户通过与银行签订协议&#xff0c;将客户的银行账户连接到商户的相关账户&#xff0c;并在支付时直接输入相关账户的支付密码。通过与特定商户共同为客户提供的电子支付方式&#xff0c;客户在中国银行开立的银行账户与客户在特定商户的用户ID绑定&#xff0c;并…

华为“鸿鹄之志”:2025年L4,2030 年实现 L5,全场景AI指日可待

在第七届未来网络发展大会上&#xff0c;华为公司的彭松发表了题为《打造端到端 AI 网络&#xff0c;打通全场景 AI 能力》的主题演讲。他指出&#xff0c;AI 时代网络创新包括 Network for AI 和 AI for Network 两个方面的目标。 前者旨在构建支持AI业务的网络&#xff0c;实…

冠达管理:股票基本知识有哪些?建议新手了解!

股票教育是存在较大危险的&#xff0c;所以新手出资者在进行股票买卖之前主张先了解股票基本常识。那么股票基本常识有哪些&#xff1f;主张新手了解!下面就为大家剖析&#xff1a; 1、股票含义 股票是股份有限公司所有权的一部分&#xff0c;也是发行的所有权凭据&#xff0c…

HTTP协议初识·上篇

目录 认识URL urlencode和urldecode 如何编码解码和验证过程 一个基本的网络服务器的流程 代码验证请求与响应 准备工作 HTTPServer.hpp Protocol.hpp makefile 1请求 HTTPServer.hpp 1.0函数handlerHttp-基本流程 再次处理 HttpServer.cc(新建文件) 测试1 -- 请…

JS的事前循环Event Loop

前言 javascript是单线程脚本语言&#xff0c;并非指js只有一个线程&#xff0c;而是同一时刻只能有一个线程在工作。 js异步如何实现 如果 JS 中不存在异步&#xff0c;只能自上而下执行&#xff0c;如果上一行解析时间很长&#xff0c;那么下面的代码就会被阻塞。 对于用户…

【直接收藏】前端 VUE 高阶面试题(三)

86.说说vue生命周期&#xff0c;发送请求在生命周期的哪个阶段&#xff0c;为什么不可以是beforeMount&#xff0c;mounted中 回答&#xff1a; 1、vue的生命周期 1&#xff09;、生命周期是什么&#xff1f; Vue 实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始…

C++信息学奥赛1148:连续出现的字符

代码题解&#xff1a; #include <iostream> #include <string> using namespace std; int main() {int n;// 输入一个整数ncin>>n;cin.ignore();string str1;// 输入一行字符串getline(cin,str1);for(int i0;i<str1.length();i){int a0;for(int ji;j<…

自定义拖拽功能,上下拖拽改变盒子高度

核心在于监听鼠标的move来改变div的高度&#xff0c;抽成了组件 <template><div ref"container" class"drag"><z-tooltip v-if"isShowIcon" effect"dark" content"格式化" placement"top-start"&…

Windows11 安装 nvm node版本管理工具

在 Windows 11 上安装并配置 NVM 与 Node.js 版本管理工具 引言&#xff1a; Node.js 是一款强大的开发工具&#xff0c;而版本管理工具 NVM 则可以帮助我们在不同的项目中灵活地切换和管理 Node.js 版本。本篇博客将为大家介绍如何在 Windows 11 操作系统上安装 NVM&#xff…

【Go Web 篇】从零开始:构建最简单的 Go 语言 Web 服务器

随着互联网的迅速发展&#xff0c;Web 服务器成为了连接世界的关键组件之一。而在现代编程语言中&#xff0c;Go 语言因其卓越的性能和并发能力而备受青睐。本篇博客将带你从零开始&#xff0c;一步步构建最简单的 Go 语言 Web 服务器&#xff0c;让你对 Go 语言的 Web 开发能力…

什么是确认测试报告?确认测试报告的用途和周期?

确认测试又称有效性测试&#xff0c;其任务是验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试需要提供的资料包括&#xff1a; 软件需求规格说明书&#xff1a;列出了软件的功能和性能要求&#xff0c;是确认测试的依据。 确认测试计划&#xff1a;制定了确认…

JUC集合、map线程安全

文章目录 在并发场景下&#xff0c;集合产生的问题解决方案VectorsynchronizedListCopyOnWriteArrayList写时赋值技术什么是写实复制技术&#xff1a; HashSet线程不安全问题解决办法 HashMap线程不安全总结特点 在并发场景下&#xff0c;集合产生的问题 现在下面这段代码&…

视频分割合并工具说明

使用说明书&#xff1a;视频分割合并工具 欢迎使用视频生成工具&#xff01;本工具旨在帮助您将视频文件按照指定的规则分割并合并&#xff0c;以生成您所需的视频。 本程序还自带提高分辨率1920:1080&#xff0c;以及增加10db声音的功能 软件下载地址 https://github.com/c…

kafka--技术文档--spring-boot集成基础简单使用

阿丹&#xff1a; 查阅了很多资料了解到&#xff0c;使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意&#xff01; 使用spring-boot整合kafka 1、导入依赖 核心配…

【DEVOPS】Jenkins使用问题 - 控制台输出乱码

0. 目录 1. 问题描述2. 解决方案3. 最终效果4. 总结 1. 问题描述 部门内部对于Jenkins的使用采取的是Master Slave Work Node的方式&#xff0c;即作为Master节点的Jenkins只负责任务调度&#xff0c;具体的操作由对应的Slave Work Node去执行。 最近团队成员反馈一个问题&a…

高忆管理股票分析:1年期LPR下调10个基点 融资成本稳中有降

8月21日&#xff0c;中国人民银行授权全国银行间同业拆借中心发布&#xff0c;最新借款商场报价利率(LPR)为&#xff1a;1年期种类报3.45%&#xff0c;较上一期下降10个基点&#xff1b;5年期以上种类报4.20%&#xff0c;与前一期相等。 上海高忆私募基金&#xff08;百度搜索高…

2023深圳智博会,正运动助力智能装备“更快更准”更智能!

■展会名称&#xff1a; 2023 深圳国际智能装备产业博览会暨深圳国际电子装备产业博览会&#xff08;以下简称“EeIE 智博会”&#xff09; ■展会日期 2023年8月29日-31日 ■展馆地点 深圳国际会展中心(宝安新馆) ■展位号 3B030 正运动技术&#xff0c;作为国内领先的…