|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 |
#include <stdio.h>#include<stdlib.h>//最大子序列和问题,动态规划,公式为d(n)=max{d(n-1),0}+A[i]typedef
long long ll;ll number[1000001];int n;ll d[1000001]={0};ll max(ll a,ll b){ return
(a<b)? b:a;}int
main(){ int
i,j; while(scanf("%d",&n)!=EOF) { d[0]=0; scanf("%lld",&number[1]); ll m=number[1]; for(i=2;i<=n;i++) { scanf("%lld",&number[i]); if(number[i]<m) m=number[i]; } ll s=m; for(i=1;i<=n;i++) { d[i]=max(0,d[i-1])+number[i]; if(d[i]>s) s=d[i]; } printf("%lld\n",s); } return
0;} |
原文:http://www.cnblogs.com/wickedpriest/p/3601012.html