动态规划:求最大子段和

来源:互联网 发布:apache tomcat modjk 编辑:程序博客网 时间:2024/04/30 18:40

动态规划:求最大子段和

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、测试结果截图


1 0
原创粉丝点击