最大子列和问题

问题如下:


使用在线处理的方法,“在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。



代码如下:

#include <stdio.h>
#include <malloc.h>

int main() {
  
  int  K = 0;
  scanf("%d",&K);   //输入K
  int * arr = (int *)malloc(sizeof(int)*(K+1)); 
  int i;
  for(i=0; i<K; ++i) {
    scanf("%d",arr+i);   //输入数组
  }
  
  printf("%d",MaxSubseqSum(K,arr));
  
  return 0;
}

int MaxSubseqSum(int K, int * arr) {
  
  int MaxSum = 0;    //最大子列和
  int ThisSum = 0;   //当前子列和
  int i;
  for(i=0; i<K; ++i) {
    ThisSum += arr[i];   //向右累加
    if(ThisSum < 0) {    //如果当前子列和小于0,抛弃
      ThisSum = 0;   
    }
    if(ThisSum > MaxSum) {  //更新最大值
      MaxSum = ThisSum;
    }
  }
  
  return MaxSum;
}








猜你喜欢

转载自blog.csdn.net/yzy1103203312/article/details/80052311
今日推荐