#include<iostream>
using namespace std;
/*
b=0为暂时存放的值,sum=0记录目前的最优值
a[]为输入数据,从1开始初始化,n为数据个数
递归公式:
b = b > 0 ? b+a[i] : a[i] 1<=i<=n
当 b > sum , sum = b
最优值:0,当数组里面的数据都为负数
sum
*/
int max(int n, int *a){
int sum=0, b=0;
for(int i=1; i<=n; i++){
if(b>0){
b += a[i];
}
else{
b = a[i];
}
if(b>sum){
sum = b;
}
}
return sum;
}
int main(){
int n;
int a[10000];
cin>>n;
for(int i=1; i<=n; i++){
cin>>a[i];
}
cout<<max(n, a);
}
动态规划——最大字段和
最新推荐文章于 2022-09-18 20:07:34 发布
