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;
}
废话不说,贴代码。
#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 Max Sum
- HDOJ 1003 Max Sum
- hdoj1003--Max Sum
- HDOJ 1003 Max Sum(DP,思维)
- HDOJ 1003 Max Sum 动态规划入门(
- HDOJ 1003 Max Sum(动态规划)
- 简单DP HDOJ 1003 MAX SUM
- HDOJ 1003 Max Sum
- HDOJ 1003 Max Sum
- Max Sum(hdoj1003)
- HDOJ 1003题:max sum
- HDOJ(1003) Max Sum
- DP专题2 HDOJ 1003 Max Sum
- hdoj1003-Max Sum(数组的最大和)
- hdoj1003 Max Sum (DP 最大子序列求和)
- HDOJ 1003 Max Sum
- HDOJ1003:Max Sum
- HDOJ 1003 Max Sum
- hdoj 1003 Max Sum【dp】
- HDOJ 1003 Max Sum