/*递推公式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 ",dp[n]); } return 0;}