1. 程式人生 > >基礎數據結構應用——最大子列和問題

基礎數據結構應用——最大子列和問題

pan nts -h 不同 ... printf fine () script

給定K個整數組成的序列{ N?1??, N?2??, ..., N?K?? },“連續子列”被定義為{ N?i??, N?i+1??, ..., N?j?? },其中 1。“最大子列和”則被定義為所有連續子列元素的和中最大者。例如給定序列{ -2, 11, -4, 13, -5, -2 },其連續子列{ 11, -4, 13 }有最大的和20。現要求你編寫程序,計算給定整數序列的最大子列和。

本題旨在測試各種不同的算法在各種數據情況下的表現。各組測試數據特點如下:

  • 數據1:與樣例等價,測試基本正確性;
  • 數據2:102個隨機整數;
  • 數據3:103個隨機整數;
  • 數據4:104個隨機整數;
  • 數據5:105個隨機整數;

#include<stdio.h>

#define MAXN 100001

long long maxSubseqSum(int a[],int n)
{
long long thisSum=0,maxSum=0;

for(int i=0;i<n;++i)
{
thisSum+=a[i];

if(thisSum>maxSum)
maxSum=thisSum;
else if(thisSum<0)
thisSum=0;
}

return maxSum;
}

int main()
{
int k,a[MAXN];

scanf("%d",&k);

for(int i=0;i<k;++i)
scanf("%d",&a[i]);

printf("%lld\n",maxSubseqSum(a,k));

return 0;
}

基礎數據結構應用——最大子列和問題