/*递推公式dp[i]=MAX(dp[i-1],dp[i-2]+a[j])*/
#include<stdio.h>
#include<string.h>
#define N 210000
int 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;}
转载于:https://www.cnblogs.com/thefirstfeeling/p/4410531.html