一、题目描述
某公司每日销售额记于整数数组 sales,请返回所有 连续一或多天销售额总和的最大值。
要求实现时间复杂度为 O(n) 的算法。
示例如下:
输入:
5
5 4 -1 7 8
输出:23
二、思路
这个题和之前做过的最大子序和如出一辙。具体思路可以看那篇博客里面写的。大家在每次做动态规划的题目时一定要尝试自己先去思考,按照我们给出的动态规划五部曲进行分析。
三、C++代码
#include<bits/stdc++.h>
using namespace std;
#define maxn 10010
int dp[maxn];
int sales[maxn];
//连续天数的最高销售额
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>sales[i];
}
//dp数组初始化
dp[0]=sales[0];
dp[1]=max(dp[0]+sales[1],sales[1]);
int result=0;
//确定递推公式
for(int i=2;i<n;i++){
dp[i]=max(dp[i-1]+sales[i],sales[i]);
if(dp[i]>result){
result=dp[i];
}
}
cout<<result;
}