题目:给定一个n,输入n个数,要求求出最大字段和(连在一起的叫子段)
输入:
5
10 -20 5 6 1
输出:
12
解题思路:创建一个dp[i]数组用来存储前i位的最大字段和,dp[i]=a[i]+max(dp[i-1],0);如果dp之前的最大子段和为负数,我就没必要加了,最后输出dp数组中最大的值即可。
#include <bits/stdc++.h>
using namespace std;
int n,a[100],dp[100],max1;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
dp[i]=a[i]+max(dp[i-1],0);
max1=dp[1];
for(int i=2;i<=n;i++)
if(max1<dp[i])max1=dp[i];
cout<<max1;
return 0;
}