hdu 1003 Max Sum (求最大子序列和)

来源:互联网 发布:java encode decode 编辑:程序博客网 时间:2024/05/29 12:58

以前写过,不过今天的刚开始的写法怎么也过不了。。。。

后来换了种写法重写= =就行了,原因未知。。。我好伤心啊= =

以前发的题解:点击打开链接


换写法后的代码:

#include<cstdio>#include<cstring>using namespace std;int main(){    int T,n,ans,sum,s,e,a,cas,i,tmp;    scanf("%d",&T);    for(cas=1;cas<=T;cas++)    {        scanf("%d",&n);        sum=0,tmp=1;        ans=-100000;        for(i=1;i<=n;i++)        {            scanf("%d",&a);            sum+=a;            if(sum>ans)            {                ans=sum;                s=tmp;                e=i;            }            if(sum<0)            {                sum=0;                tmp=i+1;            }        }        printf("Case %d:\n",cas);        printf("%d %d %d\n",ans,s,e);        if(cas!=T) printf("\n");    }    return 0;}

开始写WA的代码= =

我一定要找到原因!!!!不过先贴上。。。

#include<cstdio>#include<cstring>#define INF 0xffffffusing namespace std;int a[100010],pre[100010],dp[100010];int main(){    int T,cas,n,tmp,sum,ans,s,e;    scanf("%d",&T);    for(cas=1;cas<=T;cas++)    {        scanf("%d",&n);        memset(dp,0,sizeof(dp));        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            pre[i]=1;        }        sum=0,tmp=1;        for(int i=1;i<=n;i++)        {            sum+=a[i];            if(sum<0)            {                sum=0;                tmp=i+1;            }            else            {                pre[i]=tmp;                dp[i]=sum;            }        }        ans=-1000000;        for(int i=1;i<=n;i++)        {            if(dp[i]>ans)            {                ans=dp[i];                s=pre[i];                e=i;            }        }        printf("Case %d:\n",cas);        printf("%d %d %d\n",ans,s,e);        if(cas!=T) printf("\n");    }    return 0;}//wa





0 0
原创粉丝点击