hdu 1003 hdu1231 简单dp最大子串和

来源:互联网 发布:java b2c 源码 编辑:程序博客网 时间:2024/04/29 17:30

hdu1003

# include<iostream># include<string.h>using namespace std;const int maxn=100005;int a[maxn];int dp[maxn], s[maxn];int main(void){    int t, n, i, j;    cin>>t;    for(j=1; j<=t; j++)    {        cin>>n;        for(i=1; i<=n; i++)        cin>>a[i];        memset(dp, 0, sizeof(dp));        dp[1]=a[1];        s[1]=1;        for(i=2; i<=n; i++)        {            if(dp[i-1]<0)            {              dp[i]=a[i];              s[i]=i;            }            else            {              dp[i]=dp[i-1]+a[i];              s[i]=s[i-1];            }        }        int maxi=1;        for(i=2; i<=n; i++)        {            if(dp[i]>dp[maxi])            {                maxi=i;            }        }        cout<<"Case "<<j<<":"<<endl<<dp[maxi]<<" "<<s[maxi]<<" "<<maxi<<endl;        if(j!=t)        cout<<endl;    }    return 0;}

hdu1231

# include<stdio.h># include<string.h>const int maxn=100005;int a[maxn];int dp[maxn], s[maxn];int main(void){    int n, i, j;    while(scanf("%d", &n)!=EOF, n)    {        for(i=1; i<=n; i++)        scanf("%d", &a[i]);        memset(dp, 0, sizeof(dp));        dp[1]=a[1];        s[1]=1;        for(i=2; i<=n; i++)        {            if(dp[i-1]<0)            {              dp[i]=a[i];              s[i]=i;            }            else            {              dp[i]=dp[i-1]+a[i];              s[i]=s[i-1];            }        }        int maxi=1;        for(i=2; i<=n; i++)        {            if(dp[i]>dp[maxi])            {                maxi=i;            }        }        if(dp[maxi]<0)        printf("%d %d %d\n", 0, a[1], a[n]);        else        printf("%d %d %d\n", dp[maxi],a[s[maxi]],a[maxi]);    }    return 0;}


原创粉丝点击