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;
}

 

posted on 2012-07-04 11:26  渔家傲  阅读(304)  评论(0编辑  收藏  举报

导航