动态规划:求最大子段和
1、题目
2、方法
3、实现代码
//动态规划法求最大子段和
// by 孙琨SealSun at UCAS
// 2015.11.20
#include<iostream>
using namespace std;
#define MAX 256
// 算法
void MaxSum(int n,int *a){
int sum = 0; // 最大子段和
int b = 0; // 局部子段和
int start = 0; // 最大子段起始处
int end = 0; // 最大子段终止处
for(int i=1; i<=n; i++){ // 一直相加,直到和不为正数,当前值取代
if(b>0){
b += a[i];
// end = i;
}
else{
b = a[i];
start = i;
}
if(b>sum){
sum = b;
end = i;
}
}
cout << "最大子段和为:"<<endl;
cout << sum <<endl;
cout << "最大子段为:" <<endl;
for(int i=start; i<=end; i++){
cout << a[i] << " ";
}
cout << endl;
}
// 测试
int main(){
int n; // 输入数的总个数
int a[MAX]={0}; // 具体存储的数值
cout << "请输入数的总个数:"<<endl;
cin >> n;
cout << "请依次输入每一个数:" <<endl;
for(int i=1; i<=n; i++){
cin >> a[i];
}
MaxSum(n,a);
return 0;
}
4、测试结果截图