连续子数组最大和
输出描述:
连续子数组的最大之和。
示例1
输入:
8
1 -2 3 10 -4 7 2 -5
输出:
18
说明:
经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18
示例2
输入:
1
2
输出:
2
示例3
输入:
1
-10
输出:
-10
dp[i]表示由a[i]为末尾的最大连续子序列和
一共有两种情况,max=a[i]或者=dp[i-1]+a[i]
//动态规划
#include<bits/stdc++.h>
using namespace std;
//连续子数组最大和
const int INF=INT_MAX;//定义无穷小
int dp[20];
int a[200001];
int main(){
int n;
cin>>n;
//n为数组长度
for(int i=0;i<n;i++){
cin>>a[i];
}
int maxx=-INF;
//dp[i]表示由a[i]为末尾的最大连续子序列和
for(int i=0;i<n;i++){
if(i==0){
dp[i]=a[i];
}
else{
dp[i]=max(dp[i-1]+a[i],a[i]);
}
maxx=max(dp[i],maxx);
}
cout<<maxx;
return 0;
}