您的位置:首页 > 其它

hdu1231 最大连续子序列

2014-05-26 19:06 351 查看
hdu1231

动态规划 状态转移方程  s[i]=max(s[i-1]+a[i],a[i]) 

//动态规划 状态转移方程  s[i]=max(s[i-1]+a[i],a[i])
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 10005
struct Mark{
int start;
int end;
};
Mark mark[MAX];
int main(){
int k,s[MAX],a[MAX];
bool flag;
while(scanf("%d",&k)!=EOF&&k){
flag=0;
memset(s,0,sizeof(s));
for(int i=1;i<=k;i++){
scanf("%d",&a[i]);
if(!a[i])//a[i]==0 非全是负数
flag=1;
if(s[i-1]+a[i]>a[i]){
s[i]=s[i-1]+a[i];
mark[i].start=mark[i-1].start;
mark[i].end=i;
}else{
s[i]=a[i];
mark[i].start=i;
mark[i].end=i;
}
}
int ans=0,f=0;
for(int i=0;i<=k;i++){
if(ans<s[i]){
ans=s[i];
f=i;
}
}
if(!ans&&!flag){//ans==0
printf("%d %d %d\n",ans,a[1],a[k]);
}
else{
printf("%d %d %d\n",ans,a[mark[f].start],a[mark[f].end]);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划 hdu