zoukankan      html  css  js  c++  java
  • hdu1003 Max Sum 解题报告

    几个月都没A题目了 记得上次就在这个题目卡掉了 今天AC这个题 算是个继续吧

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003

    考虑情况:

    1.当第一个数是负数时: 考虑最大和全是负数的情况 取得最大负数并更新sum

    核心来比较sum+list[i]和max的大小并更新max

    当sum<0时令sum=0其实就是比较list和max的大小

    /*
      Name:hdu1003总算AC了 
      Copyright:
      Author:yujiaao
      Date:
      Description:hdu
    */
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int list[1000000];
    int main()
    {
    //    freopen("C:\\Users\\yujiaao\\Desktop\\测试专用\\in.txt","r",stdin);
    //    freopen("C:\\Users\\yujiaao\\Desktop\\测试专用\\out.txt","w",stdout);
        int ncase,max,start,end,i,ntest,sum,max_start,max_end;
        scanf("%d",&ncase);
        for(int j=0;j<ncase;j++)
        {
            memset(list,0,sizeof(list));
            start=0;
            sum=0;
            scanf("%d",&ntest);
            sum=0;
            max=-10000;
            max_start=0;
            max_end=0;
            start=0;
            end=0;
            for(i=0;i<ntest;i++)
            {
                scanf("%d",&list[i]);
                if(max<0)//全是负数的情况 
                {
                    if(list[i]>max)
                    {
                        max=list[i];
                        max_start=i;
                        max_end=i;
                        start=i;
                        end=i;
                        sum=list[i];
                    }
                }
                else
                {    
                    end=i;
                    if(sum<0)
                    {
                        sum=0;
                        start=i;
                    //    end=i;
                    }
                    if( (sum+list[i])>max )
                    {
                        max=sum+list[i];
                        max_start=start;
                        max_end=end;
                    }
                    sum+=list[i];
                        
                }    
            }
            if(j!=0)
            {
                printf("\n");
            }
            printf("Case %d:\n%d %d %d\n",j+1,max,max_start+1,max_end+1);
        }
    //    system("pause");
        return 0;
    }
  • 相关阅读:
    JavaScript概述
    JavaScript概述
    python语法基础
    python 网络编程
    python 日志模块
    python 异常处理
    python tricks
    记录_省赛(一)
    异或加密算法
    三目条件运算符
  • 原文地址:https://www.cnblogs.com/yujiaao/p/2575906.html
Copyright © 2011-2022 走看看