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

1007 Maximum Subsequence Sum

1007 Maximum Subsequence Sum
分数 25

全屏浏览

切换布局
作者 CHEN, Yue
单位 浙江大学
Given a sequence of K integers { N 1, N 2 , ..., N K }. A continuous subsequence is defined to be { N i , N i+1 , ..., N j} 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

1.分析

        1.题目要求如果全部为负数,那么最大和为0,输出数组的头和尾

        2.全部为负数  和  负数和0的组合是两回事,后者输出0  0  0;

2.代码

#include<iostream>
using namespace std;
const int MAX=1e5+10;
int K,a[MAX];
int s,ma,t,ts,e,f=0; //ma代表最大和,t代表局部最大值,s代表开始下标,ts代表局部开始下标,e代表结束下标
int main(){
    cin>>K;
    for(int i=0;i<K;i++){       //输入
        cin>>a[i];
        if(a[i]>=0) f=1;      //判断是否全部为负数
    }
    for(int i=0;i<K;i++){
        if(t+a[i]>a[i]){
            t+=a[i];
        }
        else{
            t=a[i];
            ts=i;
        }
        if(t>ma){
            ma=t;
            e=i;
            s=ts;
        }
    }
    if(!f) cout<<ma<<" "<<a[0]<<" "<<a[K-1];        //判断输出
    else if(f&&ma==0) cout<<ma<<" "<<0<<" "<<0;
    else cout<<ma<<" "<<a[s]<<" "<<a[e];
    return 0;
}

相关文章:

  • 如何在IDEA中借助深度思考模型 QwQ 提高编码效率?
  • DeepSeek+RAG局域网部署
  • 微软纳德拉最新一期访谈
  • 如何删除git上最后一次提交,Git日常使用操作说明。
  • python高级4
  • Mysql从入门到精通day3————记一次连接查询的武装渗透
  • 【二分查找 树状数组 差分数组 离散化 】P6172 [USACO16FEB] Load Balancing P|省选-
  • 牛顿-拉夫逊迭代法原理与除法器的软件与硬件实现
  • 六十天Linux从0到项目搭建第四天(通配符命令、其他命令、压缩解压工具、shell的感性理解、linux权限解析)
  • 从零实现本地文生图部署(Stable Diffusion)
  • 常见框架漏洞攻略-ThinkPHP篇
  • 人工智能AI术语
  • 排序--快排--Hoare法
  • BSides Vancouver 2018靶机通关教学
  • Wireshark网络抓包分析使用详解
  • 【从零实现Json-Rpc框架】- 入门准备篇
  • java项目之校园美食交流系统(源码+文档)
  • python --face_recognition(人脸识别,检测,标题,特征提取)
  • C++指针基础与应用详解
  • JAVA 中的 ArrayList 工作原理
  • 苹果手机为何无法在美制造?全球供应链难迁移
  • 中国金茂向滨江集团提供11.21亿元诚意金借款,拟合作开发3月获取的地块
  • 澎湃读报丨央媒头版集中刊发社论,庆祝“五一”国际劳动节
  • 中国代表:美“对等关税”和歧视性补贴政策严重破坏世贸规则
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 范宇任上海宝山区副区长