杭电ACM 1003 ( 动态规划法 水题)

#include <iostream>
using namespace std;
void MaxSum(int *p,long N);
int main()
{
    int T = 0;
    long N = 0;
    int CaseNum = 1;
    cin >> T;
    while(T--)
    {
        cin >> N;

        int *p = new int [N];

        for(int i = 0;i < N;i++)

            cin >> *(p + i);

        
        cout << "Case " << CaseNum <<":"<<endl;

        MaxSum(p,N);

        // 注意最后一行不换行
        if(T)
            cout << endl; 
        CaseNum ++;
        //内存管理
        delete p;
        p = 0;
        

    }
    return 0;
}
void MaxSum(int *p,long N)
{
    long maxsum = -1001;
    long tempsum = 0;
    long index_begin = 0;
    long index_end = 0;

    for(long i = 0;i < N;i++)
    {
        tempsum = * (p + i);

        if(tempsum > maxsum)
        {
            maxsum = tempsum;
            index_begin = index_end = i;
        }

        for(long j = i + 1; j < N;j++)
        {
            if(tempsum + * (p + j) < 0)
                break;
            else
            {
                tempsum += * (p + j);
                if(tempsum > maxsum)
                {
                    maxsum = tempsum;
                    index_begin = i;
                    index_end = j;
                }
            }
                
        }

    }

    cout << maxsum << " " << index_begin + 1 << " " << index_end + 1<<endl;
}

 

posted @ 2013-10-12 22:52  迷路君的博客  Views(320)  Comments(0Edit  收藏  举报