闲的无事,锻炼一下自己的思维,速写了一个最长字串和,利用动态规划的思想,代码如下:
注意我是如何得到数组的-1下标的,这个技巧很有用啊!
#include <iostream>
#include <string>
using namespace std;
int p[1000];//记录前n个数的最长字串和
inline int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int a[1000];
int n = 0;
int *dp = p + 1;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int temp = 0;
for (int i = 0; i < n; i++)
{
int temp1 = temp + a[i];//包含第i个数
int temp2 = dp[i - 1];//不包含第i个数
dp[i] = max(temp1, temp2);//更新第i个数的dp值
temp += a[i];
if (temp <= 0)
{
temp = 0;
}
}
cout << dp[n - 1];
return 0;
}