动态规划-最大子段和

动态规划-最大子段和

一、最大子段和问题

问题描述:给定n个整数(可能有负数)组成的序列a1,a2,...,an,求该序列的最大子段和。如果所有整数都是负数,那么定义其最大子段和为0。

本题比较简单,我们要求一个最大的字段和,我们通过分析可以找到一定的规律,若是之后的值是正数,那么加上的话一定是一个更大的数,若是负数,则会变小,但是如果相加过后小于0,那么这个就肯定不属于最大字段和里的值了,我们以 1,-2,3,-1,3,5,-2 为例子,若是求最大子段和,显然是 3+-1+3+5 得到10,而为什么呢,因为1-2是负数,再加上后面的字段那还不如舍去这个负数在加呢,有了个这个思想,就很容易实现代码。
代码如下

#include<iostream>
using namespace std;
int fun(int *a,int N)
{
     int max=0;
     int flag=0;
     for (int i=0;i<N;i++)
     {
        if(a[i]+flag>0)
            flag=a[i]+flag;
        else 
            flag=0;
        if(flag>max)
            max=flag;
     }
     return max;
}
int main()
{   
    int N; 
    cout<<"请输入N";
    cin>>N;
    int *a=new int [N];
    cout<<"请输入N个数字";
    for(int i=0;i<N;i++)
        cin>>a[i];
    for(int i=0;i<N;i++)
        cout<<a[i]<<endl;
    cout<<"答案为"<<fun(a,N)<<endl;
 } 


作者:放下梧菲
链接:https://www.jianshu.com/p/b72ddea04bf1
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @   菜鸡一枚  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
历史上的今天:
2015-10-08 Extending Markov to Hidden Markov
点击右上角即可分享
微信分享提示