题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1231
代码:#include<stdio.h> #include<stdlib.h> #define MAX 10001 //动态规划:状态方程:c[n]=max{c[n-1]+a[n],a[n]}; int main(){ int K; while(scanf("%d",&K)!=EOF){ if(K==0)break; int a[MAX],i; for(i=0;i<K;i++){ scanf("%d",&a[i]); } int c[MAX],start[MAX],maxNum,start0,end; c[0]=a[0];//保存最大值; start[0]=a[0]; for(i=1;i<K;i++){ if(c[i-1]+a[i]>a[i]){ start[i]=start[i-1]; c[i]=c[i-1]+a[i]; } else{ start[i]=a[i]; c[i]=a[i]; } } maxNum=c[0]; start0=a[0]; end=a[0]; for(i=1;i<K;i++){ if(maxNum<c[i]){ maxNum=c[i]; start0=start[i]; end=a[i]; } } if(maxNum<0){ printf("0 %d %d/n",a[0],a[K-1]); } else{ printf("%d %d %d/n",maxNum,start0,end); } } }
posted on 2011-02-25 18:30 江南烟雨hust 阅读(115) 评论(0) 收藏 举报