最大子段和
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int maxsum(int nums[],int n) 5 { 6 int dp[n]; 7 dp[0]=nums[0]; 8 int Max=dp[0]; 9 for(int i=1;i<n;++i) 10 { 11 12 if(dp[i-1]<=0) 13 { 14 dp[i]=nums[i]; 15 } 16 else 17 { 18 dp[i]=dp[i-1]+nums[i]; 19 } 20 Max=max(dp[i],Max); 21 } 22 23 24 return Max; 25 } 26 27 int maxsum1(int nums[],int n) 28 { 29 int dp; 30 dp=nums[0]; 31 int Max=dp; 32 for(int i=1;i<n;++i) 33 { 34 35 if(dp<=0) 36 { 37 dp=nums[i]; 38 } 39 else 40 { 41 dp=dp+nums[i]; 42 } 43 Max=max(dp,Max); 44 } 45 46 47 return Max; 48 } 49 int main() 50 { 51 int a[8]={1,-3,7,8,-4,12,-10,6}; 52 //cout<<maxsum(a,8); 53 cout<<maxsum1(a,8); 54 return 0; 55 }
道阻且长,行则将至