您的位置:首页 > 产品设计 > UI/UE

1007. Maximum Subsequence Sum (25)

2018-03-21 23:59 453 查看
题意:求一个序列的最大子序列和,
思路:
(1)最大子序列和挺好求的,动态法,依次将数读入并加入到sum中,如果sum小于0,则sum=0(因为负数只会使和变小),否则与maxsum比较,如果比maxsum大,则更改maxsum值。
(2)子序列最后一个元素好求,在maxsum值改变时,同时改变最后一个值。难点应该是子序列的第一个数。思路大概是:设置一个标志。ip值的改变主要是出现断续了,也即中间sum的值出现小于0后,出现maxsum和改变时,ip值会改变。
最后附上各个测试点的提示。#include<stdio.h>
int main()
{
int N,i,a[10000];
int Maxsum=-1,sum=0,ip=0,it=-1,tag=0,ipp;
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&a[i]);
sum+=a[i];
if(sum<0){
tag=0;
sum=0;
}
else{
if(tag==0)ipp=i;
tag=1;
if(sum>Maxsum){ //新的最大和
tag=1;
Maxsum=sum;
it=i;
ip=ipp;
}
}
}
if(it==-1)Maxsum=0,ip=0,it=N-1;
printf("%d %d %d",Maxsum,a[ip],a[it]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: