hdu1087

来源:互联网 发布:大专能学到软件编程吗 编辑:程序博客网 时间:2024/05/21 08:37
 最大递增子段和,状态方程:sum[j]=max{sum[i]}+a[j]; 其中,0<=i<=j,a[i]<a[j]    
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <vector>#define Maxn 2000using namespace std;#define ll __int64#define LL  longint save[Maxn];LL dp[Maxn];int n,x,ans,k,knum;void work(){    for(int i=1;i<=n;i++)    {        scanf("%lld",&save[i]);    }    for(int i=1;i<=n;i++)    {        dp[i]=save[i];        for(int j=1;j<=i-1;j++)        {            if(save[i]>save[j])                dp[i]=max(dp[i],dp[j]+save[i]);            //dp[i]=max(dp[i],dp[j]+check(i,j));        }    }    LL ans=0;    for(int i=1;i<=n;i++)        {            ans=max(ans,dp[i]);        }        printf("%lld\n",ans);}int main(){    while(scanf("%d",&n)&&n)    {        memset(dp,0,sizeof(dp));     work();    }    return 0;}

0 0
原创粉丝点击