记录编号 |
323173 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2008]传纸条 |
最终得分 |
100 |
用户昵称 |
rewine |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.143 s |
提交时间 |
2016-10-16 06:24:48 |
内存使用 |
23.52 MiB |
显示代码纯文本
#pragma warning(disable: 4786)
#pragma G++ optimize ("O2")
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <iostream>
#define Max(a,b) (a>b ? a:b)
#define Min(a,b) (a<b ? a:b)
#define Rep(_i,x,y) for(int _i = x; _i <= y;_i++)
using namespace std;
typedef unsigned int lg;
#define MAXX 100009
inline bool read(int &x){
char c=getchar();
while(c!=EOF&&!isdigit(c)) c=getchar();
if(c==EOF) return 0; x=0;
while(isdigit(c)) {
x=x*10+c-'0';
c=getchar();
}
return 1;
}
int a[51][51];
int f[51][51][51][51];
int n,m;
signed main(void) {
freopen("message.in","r",stdin);
freopen("message.out","w",stdout);
read(n);read(m);
Rep(i,1,n)
Rep(j,1,m)
read(a[i][j]);
Rep(i,1,n) Rep(j,1,m) Rep(x,1,n) Rep(y,1,m)
if(i != x || j != y || (i==n&&j==m)) {
f[i][j][x][y] = Max (
Max(f[i-1][j][x-1][y],f[i-1][j][x][y-1]),
Max(f[i][j-1][x-1][y],f[i][j-1][x][y-1])
) + a[i][j] + a[x][y];
//cout<<i <<j<<x<<y <<f[i][j][x][y] <<endl;
}
cout << f[n][m][n][m];
return 0;
}