/* 题意:从格子里取数字,取了当前数字,则前一个后一个都不能取,前一行后一行也不能取 看别人的 DP 先是对每行DP f[i]=max(f[i-2]+a[i],f[i-1]) 每行计算过后,再对每行的结果进行这样的DP 这题很巧 对每行来说,其中的每个元素不能取其前面的和后面的 把行当做元素,那么这个矩阵也是一行,某行取了数,则其前一行和后一行不能取 模型一样 */ #include<stdio.h> #include<string.h> int a[200010],dp1[200010],dp2[200010]; int m,n; int max(int a,int b){return a>b?a:b;} int dp(int dd[],int g) { int i; dp1[0]=0; dp1[1]=dd[1]; for(i=2;i<=g;i++) dp1[i]=max(dp1[i-2]+dd[i],dp1[i-1]); return dp1[g]; } int main() { int i,j; while(scanf("%d%d",&m,&n)!=EOF) { dp2[0]=0; for(i=1;i<=m;++i) { for(j=1;j<=n;++j) scanf("%d",&a[j]); dp2[i]=dp(a,n); } printf("%d\n",dp(dp2,m)); } }