最大子列问题首尾顺序

本文介绍了一种求解整数序列中最大连续子列和的算法,并通过C++代码实现了该算法。具体而言,算法能够找出给定整数序列中具有最大和的连续子列及其首尾元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定KK个整数组成的序列{ N_1N1N_2N2, ..., N_KNK },“连续子列”被定义为{ N_iNiN_{i+1}Ni+1, ..., N_jNj },其中 1 \le i \le j \le K1ijK。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{10, 1, 2, 3, 4, -5, -23, 3, 7, -21 },其连续子列{ 1, 2, 3, 4 }有最大的和10。现要求你编写程序,计算给定整数序列的最大子列和并输出最大子列的首尾元素。

上源码

 #include<iostream>  
using namespace std;  
int main()  
{  
    int thissum,sum,n,j;  
    int a=0,b=0,c=0,d=0,e=0,f=0,set1,set2;  
    cin>>n;  
    thissum=sum=0;  
    for(int i=0;i<n;i++)  
    {  
        cin>>j;  
        if(i==0) set1=j;  
        if(i==(n-1)) set2=j;  
        if(j>=0) f=1;  
               if(b==0&&j>0)  
        {  
            d=j;  
            b=1;  
        }  
        thissum+=j;  
        if(thissum>sum)  
        {  
                sum=thissum;  
                a=j;  
                e=d;  
        }  
        else if(thissum<0)  
        {  
            thissum=0;  
            b=0;  
        }  
           }  
    if(f==0) 
    { cout<<sum<<' '<<set1<<' '<<set2;  
 } 
    else
 {   cout<<sum<<' '<<e<<' '<<a;  
    return 0; } 
}  
T23713 [愚人节题目2]数据结构大毒瘤 提交答案加入题单复制题目 提交 1.47k 通过 273 时间限制 1.00s 内存限制 125.00MB 题目编号 T23713 提供者 洛谷官方团队 难度 暂无评定 历史分数 暂无 提交记录 标签 洛谷原创 推荐题目 暂无 复制 Markdown 展开 进入 IDE 模式 题目背景 这是一道毒瘤题 这题太难了,所以窝先卖个萌0=w=0 窝从没出过这么难的题!!!! 题目描述 你好啊~这是一道数据结构毒瘤题~ 您需要维护一个数S~ 有7种操作,形如w a b c w=0 输出S a ​ +S a+1 ​ +...+S b ​ 。c没有用 w=1 将[S a ​ ,S b ​ ]翻转。c没有用 w=2 将[S a ​ ,S b ​ ]内的数全部加上c。 w=3 将[S a ​ ,S b ​ ]内的数全部乘上c。 w=4 将[S a ​ ,S b ​ ]内的数全部开根号。c没有用 w=5 将S a ​ 加上c,将S a+1 ​ 加上2c,...,将S b ​ 加上c*(b-a+1) w=6 将[S a ​ ,S b ​ ]和[S b+1 ​ ,S c ​ ]交换。保证c-b=b-a+1。 输入格式 第一行是n和m,n表示初始序的长度,m表示操作数量 然后n个整数,表示初始序S 之后m行每行四个数w a b c,代表一个操作 输出格式 对于每个0操作,输出一行表示答案 输入输出样例 输入 #1复制 5 1 1 2 3 4 5 0 1 2 3 输出 #1复制 3 说明/提示 样例解释 第一次操作,询问的答案为1+2=3 数据范围 1≤n,m≤5×10 4 ,0≤w≤9,1≤a≤b≤n 保证任何时候S i ​ ∈[−10 9 ,10 9 ] 保证输入所有数∈[−10 9 ,10 9 ]
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值