hdu1231 最大连续子序列

来源:互联网 发布:淘宝宝贝上架图片尺寸 编辑:程序博客网 时间:2024/06/07 00:53

题目大意:就是求一个最大连续连续子序列

解题思路:动态规划

<pre name="code" class="problem-content"><span style="font-size:18px;">最大连续子序列和的状态转移方程:f(i)=max(f(i-1)+ai,ai)</span>

找到最大的时候记录下那个点,最后往回找

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;const int maxn=1e4+1000;long long dp[maxn],b[maxn],ret;int n;int main(){    while(scanf("%d",&n)!=EOF)    {        if(n==0)  break;        int flag=0;        for(int i=0; i<n; i++)        {            scanf("%I64d",b+i);        }        ret=b[0];        dp[0]=b[0];        int max_start=0,max_end=0;        for(int i=1; i<n; i++)        {            dp[i]=max(dp[i-1]+b[i],b[i]);            if(dp[i]>ret)            {                ret=dp[i];                max_end=i;            }        }        if(ret<0)        {            printf("0 %I64d %I64d\n",b[0],b[n-1]);            continue;        }        long long tmp=ret;        for(int i=max_end; i>=0; i--)        {            tmp-=b[i];            if(tmp==0)            {                    max_start=i;                    break;            }        }     printf("%I64d %I64d %I64d\n",ret,b[max_start],b[max_end]);    }    return 0;}


0 0
原创粉丝点击