chenxi16

导航

数据结构1 - 01-复杂度1 最大子列和问题

 

 

 1 #include<stdio.h>
 2 #define MAXK 1000000
 3 int a[MAXK],dp[MAXK],k;
 4 int main(){
 5     int i,maxsum;
 6     scanf("%d",&k);
 7     for(i=0;i<k;i++){
 8         scanf("%d",&a[i]);
 9     }
10     dp[0] = a[0];
11     for(i=1;i<k;i++){
12         if(dp[i-1]+a[i]<a[i]){
13             dp[i] = a[i];
14         }
15         else dp[i] = a[i]+dp[i-1];
16     }
17     maxsum = dp[0];
18     for(i=0;i<k;i++){
19         if(maxsum<dp[i]) maxsum = dp[i];
20     }
21     if(maxsum<0) printf("0\n");
22     else printf("%d\n",maxsum);
23 
24     return 0;
25 }
View Code

对于这个问题,刚开始,使用的方法是将其分类:

dp[i]>0 ,a[i]>0;

dp[i]>0,a[i]<0;

dp[i]<0,a[i]>0;

ap[i]<0,a[i]<0;

到: dp[i]>0,a[i]>0 则 dp[i] = dp[i-1] + a[i] ; else dp[i] = a[i]

到发现忽略了一个问题:{8,4,3,-1,3,2,4}这样的序列不能得到满意的结果。

 

posted on 2020-04-06 10:02  chenxi16  阅读(177)  评论(0编辑  收藏  举报