hdu1024

来源:互联网 发布:行知教育石家庄地点 编辑:程序博客网 时间:2024/06/10 00:47

hdu1024

dp,滚动数组优化
方程:

f[i][j]=max(f[i1][j1],f[i][k])+num[j];(k=1,2,...,j1)

>f[i][j]=max(f[i1][j1],f[i][j1])+num[j]

方程(滚动数组):
f[1][i]=max(f[1][i1],f[0][i1])+num[i];

    #include<iostream>    #include<cstring>    using namespace std;    const int maxn=1000005;    const int inf=0x3f3f3f3f;    int num[maxn];    int f[2][maxn];    int main()    {    int n,m;    while(cin>>m>>n)    {    int ans;    for(int i=1;i<=n;i++)    scanf("%d",&num[i]);    memset(f,0,sizeof(f));    for(int i=1;i<=m;i++)    {        ans=-inf;        for(int j=i;j<=n;j++)        {            f[1][j]=max(f[1][j-1],f[0][j-1])+num[j];            f[0][j-1]=ans;            ans=max(ans,f[1][j]);        }    }    cout<<ans<<endl;    }    return 0;    }
原创粉丝点击