提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
示例:3,-4,2,-1,2,6,-5,4
输出:9(2-1+2+6=9)
提示:以下是本篇文章正文内容,下面案例可供参考
一、思路
设置dp[i]进行迭代。代表从数组的某位一直加到i位时的最大值。
设置max选出从开始循环的最大值。
dp[i]=std::max(num[i],dp[i-1]+num[i]);
max=std::max(dp[i],max);
直观来说:3,-4,2,-1,2,6,-5,4
dp[0]=3
dp[1]=-1 (3-4)
dp[2]=2 (2)
dp[3]=1 (2-1)
dp[4]=3 (2+2-1)
dp[5]=9 (6+2+2-1)
……
max就是显示第i位时最大的和
二、完整代码
1 #include "myinclude.h"
2 int get_max(const std::vector<int>& num);
3 int main(void)
4 {
5 std::vector<int> num={3,-4,2,-1,2,6,-5,4};
6 int result=get_max(num);
7 std::cout<<result<<std::endl;
8 }
9 int get_max(const std::vector<int>& num)
10 {
11 std::vector<int> dp(num.size(),0);
12 dp[0]=num[0];
13 int max=dp[0];
14 for(int i=1;i<num.size();i++)
15 {
16 dp[i]=std::max(num[i],dp[i-1]+num[i]);
17 max=std::max(dp[i],max);
18 }
19 return max;
20 }
建议大家手写一遍
完结撒花!