1 #include <bits/stdc++.h>
2 #define maxn 13003
3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
4 typedef long long ll;
5 using namespace std;
6 inline ll read()
7 {
8 ll ans = 0;
9 char ch = getchar(), last = ' ';
10 while(!isdigit(ch)) last = ch, ch = getchar();
11 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
12 if(last == '-') ans = -ans;
13 return ans;
14 }
15 inline void write(ll x)
16 {
17 if(x < 0) x = -x, putchar('-');
18 if(x >= 10) write(x / 10);
19 putchar(x % 10 + '0');
20 }
21 int n,m;
22 int ap[203][203];
23 int dp[203][203];
24
25 int main()
26 {
27 n = read(), m = read();
28 memset(dp,0,sizeof(dp));
29 _for(i,0,n)
30 _for(j,0,m)
31 ap[i][j] = read();
32
33 _for(i,0,m)
34 {
35 if(i>=m/2-1 && i<=m/2+1)
36 dp[n-1][i] = ap[n-1][i];
37 else
38 dp[n-1][i] = -1000000;
39 }
40
41 for(int i = n-2;i >= 0;i --)
42 {
43 for(int j = 0;j < m;j ++)
44 {
45 if(j>=1)
46 dp[i][j] = dp[i+1][j-1]+ap[i][j];
47 dp[i][j] = max(dp[i][j],dp[i+1][j]+ap[i][j]);
48 if(j<=m-2)
49 dp[i][j] = max(dp[i][j],dp[i+1][j+1]+ap[i][j]);
50 }
51 }
52
53 int rnt = 0;
54 _for(i,0,m)
55 rnt = max(rnt,dp[0][i]);
56 write(rnt);
57 return 0;
58 }