数据结构-1 01-复杂度2 Maximum Subsequence Sum
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #define MAXK 10001 3 int k,a[MAXK],dp[MAXK],start[MAXK],end[MAXK]; 4 int main(){ 5 int i,j; 6 scanf("%d",&k); 7 for(i=0;i<k;i++) scanf("%d",&a[i]); 8 dp[0] = a[0]; 9 start[0] = 0; 10 end[0] = 0; 11 for(i=1;i<k;i++){ 12 if(a[i]+dp[i-1]>=a[i]){ 13 dp[i] = a[i]+dp[i-1]; 14 start[i] = start[i-1]; 15 end[i] = i; 16 } 17 else { 18 dp[i] = a[i]; 19 start[i] = i; 20 end[i] = i; 21 } 22 } 23 int maxsum=dp[0],s=start[0],e=end[0]; 24 for(i=1;i<k;i++){ 25 if(maxsum<dp[i]){ 26 maxsum = dp[i]; 27 s = start[i]; 28 e = end[i]; 29 } 30 } 31 if(maxsum<0){ 32 printf("%d %d %d\n",0,a[0],a[k-1]); 33 } 34 else printf("%d %d %d\n",maxsum,a[s],a[e]); 35 return 0; 36 }
最大和前面有一段是0 的话还是要把0包括在其中。