问题:给定由n个数(可能为负数)组成的序列a1,a2,a3,...,an,求该序列子段和的最大值。
第一种解法:(最容易考虑的方法,将所有的子段一一相加,然后比较)
1 #include<iostream> 2 using namespace std; 3 int Maxsum(int n,int *a,int &besti,int &bestj) 4 { 5 int sum = 0; 6 for(int i=1;i<=n;i++) 7 { 8 int thissum = 0; 9 for(int j=i;j<=n;j++) 10 { 11 thissum +=a[j]; 12 if(thissum>sum) 13 { 14 sum = thissum; 15 besti = i; 16 bestj = j; 17 } 18 } 19 } 20 return sum; 21 } 22 23 int main() 24 { 25 int Case = 1; 26 int T;//共有多少组数 27 cin>>T; 28 while(T>0) 29 { 30 T--; 31 int sum; 32 int N = 9;//一组有多少个数据 33 cin>>N; 34 int* array = new int[N+1]; 35 for(int i=1;i<=N;i++) 36 { 37 cin>>array[i]; 38 } 39 int besti,bestj; 40 sum = Maxsum(N,array,besti,bestj); 41 cout<<"Case "<<Case<<":"<<endl; 42 cout<<sum<<" "<<besti<<" "<<bestj<<endl; 43 44 if(T>0) 45 { 46 cout<<endl; 47 } 48 Case++; 49 } 50 return 0; 51 }
时间: 2024-10-14 08:07:29