hdu1003最大子序列和

本文详细介绍了求解最大连续子序列和问题的一种高效算法实现,并通过具体代码示例展示了如何确定最大子序列及其起始和结束位置。该算法采用动态规划思想,通过迭代更新当前子序列和与已知的最大子序列和。

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

看了一些别人的题解,说实话,我现在还不会证明这个,我不知道为什么这样是最大值

//hdu1003最大连续子序列和
// sum[i] = sum[i-1]>0 ? sum[i-1]+a[i]:a[i];
//只有当sum处于增长状态时才会得到最大子序列
//当sum处于减小状态时,应当更新起点
 
#include <iostream>
using namespace std;

#define MAX 100003
#define INF 0x7fffffff;
int T;
long N;

int input,beg,end,sum,max_sum,pos;    
//定义输入值,最长序列启始和终至位置 ,序列当前和,序列最大和 

int main()
{
    cin>>T;
    for(int i = 1; i <= T; i++)
    {
            sum = 0;
            max_sum = -INF;
            beg = end = pos = 1;
            cin>>N;
            for(int j = 1; j <= N; j++)
            {
                    cin>>input;
                    if(sum < 0)
                    {
                           sum = input;
                           pos = j;
                    }
                    else
                    {
                        sum += input;
                    }
                    
                    if(sum > max_sum)     //更新序列信息 
                    {
                           max_sum = sum;
                           beg = pos;
                           end = j;
                    }
            }
            
            cout<<"Case "<<i<<":"<<endl;
            cout<<max_sum<<" "<<beg<<" "<<end<<endl;
            if(i != T)                      //PE若干次,千万要注意 
                 cout<<endl;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值