美文网首页
杭电-1003 Max Sum

杭电-1003 Max Sum

作者: 这样你就找不到我了 | 来源:发表于2019-12-23 21:08 被阅读0次

我的思路

子序列,相比原序列 少了一个头和尾,当然也有可能只是少了其中之一或者就等于原序列。

我们假设有一根指针在序列中游走,将指针前的元素称之为头元素,将指针后的元素称之为 尾元素,并设置一个max存储 指针前元素的最大值

什么情况下少 头?
当头元素的和小于0时,对于 我们求 Max Sum来说,小于0的头元素会导致Max Sum变小,故可以直接舍去。

 if(sum < 0){
     sum = 0;
     sum_begin = sum_end = j+1;
  }

什么情况下少 尾?
知道了max和它的始末位置,我们就完成了题目,所以当所取的数使得max最大时 少尾
但在我们的指针到达之前,永远也不知道下一个值是什么,它毫无疑问会对结果造成影响,故我们无法忽略它,我们中途无法确定要从哪里开始舍尾巴,所以必须遍历到最后一个值。

注意

第一个数为负数的情况
样例中第二行的第一个数5只是序列长度,而不是序列中的值,注意审题,避免发生不必要的疑惑。

AC 代码

#include<stdio.h>
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            int num = 0;
            scanf("%d",&num);

            int sum = 0;
            int sum_begin = 1;
            int sum_end = 1;

            int max = -1001; 
            int max_begin = 1;
            int max_end = 1;
            int number;

            for(int j=1;j<=num;j++){
                scanf("%d",&number);
                sum = sum + number;

                if(sum > max){//更新Max的值
                    max = sum;
                    max_begin = sum_begin;
                    max_end = j;
                }
                
                if(sum < 0){
                    sum = 0;
                    sum_begin = sum_end = j+1;//sum从负数之后的数重新开始计算
                }
            }
            //输出
            printf("Case %d:\n",i+1);
            printf("%d %d %d\n",max,max_begin,max_end);
            if(i != n-1)
                printf("\n");
        }
    }
    return 0;
}

相关文章

  • 杭电-1003 Max Sum

    我的思路 子序列,相比原序列 少了一个头和尾,当然也有可能只是少了其中之一或者就等于原序列。 我们假设有一根指针在...

  • 杭电acm1003 Max Sum

    Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory ...

  • 杭电oj-1003(Max Sum)

    Problem Description Input Output Sample Input Sample Outp...

  • 杭电oj-1003--Max sum

    一开始我是分开考虑开始的下标和结束的下标的。直到看见某位大佬的代码原谅我太菜!!!

  • CUC-SUMMER-5-G

    G - Max Sum HDU - 1003 Given a sequence a[1],a[2],a[3]......

  • HDU-1003-(Max Sum)

    HDU-1003-(Max Sum)[http://acm.hdu.edu.cn/showproblem.php?...

  • HDU 1003 : Max Sum

    Problem Description Given a sequence a[1],a[2],a[3].........

  • 杭电ACM1003

    杭电ACM1003 其实就是简单的子串序列和为最大值的问题,这里采用动态规划法解决这个问题,代码如下: 唯一可能有...

  • 序列补充

    max(a) len(a) min(a) sum(a) sum(a,8) 序列a的总和再加8 sorted(a) ...

  • Computation Operation

    "*" ".": element wise operation Transpose: ' max find sum...

网友评论

      本文标题:杭电-1003 Max Sum

      本文链接:https://www.haomeiwen.com/subject/qvetoctx.html