动态规划-最大子段和
动态规划-最大子段和
一、最大子段和问题
问题描述:给定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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2015-10-08 Extending Markov to Hidden Markov