问题如下:
使用在线处理的方法,“在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。
代码如下:
#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; }
扫描二维码关注公众号,回复:
49774 查看本文章