柳婼吧 关注:348贴子:2,778
  • 7回复贴,共1

1007. Maximum Subsequence Sum 啥时候改正了。。

只看楼主收藏回复

刚想说一下,再点进去看发现已经改正了,不记得之前是咋错的了


IP属地:江西1楼2019-06-19 10:55回复
    目测肯定是陈越姥姥的数据结构最近开课了,刚好有这道题,然后搜到了柳神的解答,发现code不对给的指正


    IP属地:江西2楼2019-06-19 10:57
    回复
      不过是真滴强,二十多行就可以全ac了


      IP属地:江西3楼2019-06-19 10:58
      回复
        我也不记得了


        IP属地:江苏4楼2019-12-09 20:24
        回复
          Maximum Subsequence Sum的判定有问题的吧,让输出最小的首尾,我加了判别说我算法错,把判别去掉反而对了


          IP属地:黑龙江5楼2020-05-19 15:25
          回复
            附上算法和输出结果
            #include <stdlib.h>
            #include <stdio.h>
            int main()
            {
            int k,i;
            int ThisSum=0,MaxSum;//当前子列和,最大子列和
            int first,tempfirst,last,templast;
            scanf("%d",&k);
            int a[k];
            for(i=0;i<k;i++)
            {
            scanf("%d",&a[i]);
            }
            MaxSum=a[0];//初始化数值
            tempfirst=a[0];
            templast=a[0];
            first=a[0];
            last=a[0];
            for(i=0;i<k;i++)
            {
            if(ThisSum>=0)//当前子列和大于或等于0时,templast移动到当前元素,且当前子列和累加该元素
            {
            ThisSum+=a[i];
            templast=a[i];
            }else{//当前子列和小于0时,当前元素作为新的子列和,templast和tempfirst均为当前元素
            ThisSum=a[i];
            tempfirst=a[i];
            templast=a[i];
            }
            if(ThisSum>MaxSum)//当前子列和大于最大子列和时,存储和、起始元素
            {
            MaxSum=ThisSum;
            last=templast;
            first=tempfirst;
            }
            }
            if(MaxSum<0)//当最大子列和小于0,即所有元素都是负数,最大子列和为0,存储起始的元素
            {
            MaxSum=0;
            last=a[k-1];
            first=a[0];
            }
            printf("%d %d %d\n",MaxSum,first,last);
            return 0;
            }


            IP属地:黑龙江6楼2020-05-19 15:27
            回复
              #include <stdio.h>
              #define MaxSize 10001
              int main(){
              int K=0, S[MaxSize];
              int i=0;
              scanf("%d",&K);
              for(i=0;i<K;i++){
              scanf("%d",S+i);
              }
              int ThisSeq=0, MaxSeq=0, Headt=S[0], Tailt=S[0], Headm=0, Tailm=0;
              int count=0;
              for(i=0;i<K;i++){
              ThisSeq+=S[i];
              Tailt=S[i];
              if(ThisSeq>MaxSeq){
              count++;
              MaxSeq=ThisSeq;
              Headm=Headt;
              Tailm=Tailt;
              }
              if(ThisSeq==MaxSeq){
              count++;
              if(Headt<Headm){
              Headm=Headt;
              Tailm=Tailt;
              }else if(Headt==Headm&&Tailt<Tailm){
              Tailm=Tailt;
              }
              }
              if(ThisSeq<0){
              ThisSeq=0;
              Headt=S[i+1];
              }
              }
              if(!count){
              MaxSeq=0;
              Headm=S[0];
              Tailm=S[K-1];
              }
              printf("%d %d %d",MaxSeq,Headm,Tailm);
              return 0;
              }



              IP属地:黑龙江7楼2020-05-19 15:30
              收起回复