HDU 1003 动态规划

http://acm.hdu.edu.cn/showproblem.php?pid=1003

这几天开始刷动归题目,先来一道签到题

然而做的并不轻松,

没有注意到边界问题,

WA了几发才发现

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int donser[100000];
int d[100000];
int main()
{
    int i,j,k,test,n,max=0,num=1,shit;
    scanf("%d",&test);shit=test;
    while(test--)
    {
        memset(d,0,sizeof(d));
        memset(donser,0,sizeof(d));
        scanf("%d",&n);
        for(j=1;j<=n;j++)
        {
            scanf("%d",&d[j]);
        }
        donser[1]=d[1];
        for(i=2;i<=n;i++)
        {
            if(donser[i-1]<0) donser[i]=d[i];
            else donser[i]=donser[i-1]+d[i];
        }
        max=donser[1];
        for(i=2;i<=n;i++)
        {
            if(max<donser[i])
            {
                max=donser[i];num=i;
            }
        }
        int nnn=0,hhh=1;
        for(k=num;k>0;k--)
        {
            nnn=nnn+d[k];
            if(nnn==max){hhh=k;}
        }
        cout<<"Case "<<shit-test<<":"<<endl<<max<<" "<<hhh<<" "<<num<<endl;
        if(test) cout<<endl;
        max=0;num=1;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/dzzy/p/5261521.html