-
时间:2016-05-09 19:04:34 星期一
-
题目编号:[2016-05-09][51nod][1049 最大子段和]
-
题目大意:
- N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。
-
分析:
- 动态规划
- dp[i]=max(dp[i?1]+a[i],a[i])dp[i]=max(dp[i?1]+a[i],a[i])
- ans=max(dp[i])ans=max(dp[i])
- 全部为负数输出0
- 动态规划
-
遇到的问题:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1E5 + 10;
int a[maxn];ll dp[maxn];
int main(){
int n,flg = 1;
scanf("%d",&n);
for(int i = 0 ; i < n ; ++i){
scanf("%d",&a[i]);
if(a[i] >= 0) flg = 0;
}
if(flg){
printf("0\n");return 0;
}
memset(dp,0,sizeof(dp));
ll ans = 0;
dp[0] = a[0];
for(int i = 1 ; i < n ; ++i){
dp[i] = max((long long)a[i],dp[i - 1] + a[i]);
ans = max(dp[i] , ans);
}
printf("%lld\n",ans);
return 0;
}
时间: 2024-10-07 11:21:59