hdu 2845简单dp

来源:互联网 发布:陕西广电网络微信缴费 编辑:程序博客网 时间:2024/05/16 11:43
/*递推公式dp[i]=MAX(dp[i-1],dp[i-2]+a[j])*/#include<stdio.h>#include<string.h>#define N  210000int a[N],f[N],dp[N];int Max(int v,int vv) {return v>vv?v:vv;}int main() {    int n,m,i,j,k;    while(scanf("%d%d",&n,&m)!=EOF) {            memset(a,0,sizeof(a));        for(i=1;i<=n;i++)            for(j=1;j<=m;j++)            scanf("%d",&a[(i-1)*m+j]);            memset(dp,0,sizeof(dp));        for(i=1;i<=n;i++) {        k=(i-1)*m;        dp[1]=a[k+1];       for(j=k+2;j<=k+m;j++)        dp[j-k]=Max(dp[j-1-k],dp[j-2-k]+a[j]);       f[i]=dp[m];       for(j=1;j<=m;j++)//初始化        dp[j]=0;        }    dp[1]=f[1];    for(i=2;i<=n;i++)        dp[i]=Max(dp[i-1],dp[i-2]+f[i]);        printf("%d\n",dp[n]);    }return 0;}

0 0