动态规划
状态转移方程 dp[i]=max(dp[i-1],dp[i-2]+v[i])
横纵各dp一次
#include<bits/stdc++.h>
using namespace std;
int q[200020],dp[200020];
int main()
{
int M,N;
while(scanf("%d%d",&M,&N)==2)
{
for(int i=1;i<=M;i++)
{
for(int j=1;j<=N;j++)
scanf("%d",&q[j]);
for(int j=2;j<=N;j++)
q[j]=max(q[j-2]+q[j],q[j-1]);
dp[i]=q[N];
}
for(int i=2;i<=M;i++)
dp[i]=max(dp[i-2]+dp[i],dp[i-1]);
printf("%d\n",dp[M]);
}
return 0;
}