您的位置:首页 > 其它

HDOJ1003 Max Sum

2014-06-28 15:08 316 查看
一道基础的DP。

废话不说,贴代码。

#include "stdio.h"
const long MAXLONG=2147483647;

int main(){

struct dp{
long maxstart;
long maxsum;

}d[100000];
long i,j,t,n,max,point;
int num[100000];
j=1;
scanf("%ld",&t);
for(i=1;i<=t;i++){
scanf("%ld",&n);
for(j=1;j<=n;j++)scanf("%d",&num[j]);
d[1].maxstart=1;
d[1].maxsum=num[1];
for(j=2;j<=n;j++){
if (d[j-1].maxsum>=0){
d[j].maxsum=d[j-1].maxsum+num[j];
d[j].maxstart=d[j-1].maxstart;
}
else{
d[j].maxsum=num[j];
d[j].maxstart=j;
}
}
max=-MAXLONG-1;
for(j=1;j<=n;j++){
if(d[j].maxsum>max){
max=d[j].maxsum;
point=j;
}
}
printf("Case %d:\n",i);
printf("%ld %ld %ld\n",max,d[point].maxstart,point);
if(i!=t)printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDOJ 1003