动态规划一定要看清四点:
1.状态定义
2.状态转移方程
3.初始值
4.返回值
其中我们在考虑 状态定义是否合理时,可以结合是否状态转移方程中可以存在已知变量值(可以将状态转移方程落实)。
细节都在代码中:
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
class Solution {
public:
int longetseriessum(vector<int> origin_v) {
//状态定义 dp[i] 以origin_v[i] 结尾连续数组最长和
//状态转移方程 dp[i]
//if (dp[i - 1] > 0) dp[i] = dp[i - 1] + origin_v[i];
//else dp[i]= origin_v[i];
//初始值 dp[i]=origin_v[0]
//返回值 将dp[i]中的最大数取出来即可
vector<int > dp(origin_v.size(), 0);
if (origin_v.size() == 0)
{
return 0;
}
int longmax_sum = origin_v[0];
dp[0] = origin_v[0];
for (int i = 1;i < origin_v.size();i++)
{
if (dp[i - 1] > 0)
{
dp[i] = dp[i - 1] + origin_v[i];
}
else
{
dp[i] = origin_v[i];
}
longmax_sum = max(longmax_sum, dp[i]);
}
return longmax_sum;
}
};
int main()
{
Solution s;
vector<int> v{ -2,1,-3,4,-1,2,1,-5,4 };
//vector<int> v{ 2,-1,5 };
int max_sum = s.longetseriessum(v);
cout << "max_sum=" << max_sum << endl;
}
6163

被折叠的 条评论
为什么被折叠?



