HDOJ 1003 Max Sum 简单解题报告

    动态规划经典题,求和,大于max则更新,小于0则将和置为0,重新求和。

    因为笔者没有系统学过动态规划,所以一开始也是不会的。在网上看了大牛的解法后,算是明白了。贴上AC代码,就容易理解了。

#include <iostream>
using namespace std;

int main()
{
    int cas,cas2,i,n,sum,max,a,b,num,begin;
    cin>>cas;
    cas2=cas;
    while(cas--)
    {
        sum=a=b=0;
        begin=1;
        max=-1001;
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>num;
            sum+=num;
            if(sum>max)
            {
                max=sum;
                a=begin;
                b=i+1;
            }
            if(sum<0)
            {
                sum=0;
                begin=i+2;
            }
        }
        cout<<"Case "<<cas2-cas<<":\n"<<max<<' '<<a<<' '<<b<<endl;
        if(cas)
            cout<<endl;
    }
}

 

posted @ 2013-02-03 23:05  SF-_-  阅读(183)  评论(0编辑  收藏  举报