连续子数组最大和,算是最简单的动态规划题目;从设计上来说,需要一个动态递归方程,以及一个参数表;但实际上这部分的存储可以优化掉。
#include <iostream>
using namespace std;
int main() {
int N;
while(cin >> N) {
// 动态规划算法
// 设dp[i] 为以i往后的连续子数组最大和;
// 那么dp[i] = max(dp[i-1]+nums[i], nums[i])
// 最后的输出结果是在dp中找最大的连续子数组和输出。
int max_sum = INT16_MIN;
int dp_sum = 0;
while (N--) {
int num;
cin >> num;
dp_sum = max(dp_sum + num, num);
max_sum = max(dp_sum, max_sum);
}
cout << max_sum << endl;
}
return 0;
}



京公网安备 11010502036488号