比赛 防止浮躁的小练习v0.5 评测结果 AAAAAAAAAA
题目名称 传纸条 最终得分 100
用户昵称 Sky_miner 运行时间 0.085 s
代码语言 C++ 内存使用 25.39 MiB
提交时间 2016-10-15 19:39:03
显示代码纯文本
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
inline void read(int &x){
	x=0;char ch;bool flag = false;
	while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
	while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
int arr[52][52];
int f[52][52][52][52];
int catt_max(int a, int b, int c, int d){
	if(a < b) a = b;if(a < c) a = c;
	if(a < d) a = d;return a;
}
int main(){
	freopen("message.in","r",stdin);
	freopen("message.out","w",stdout);
	int m,n;
	int k,l;
	read(m);read(n);
	for(int i=1;i<=m;++i) {
		for(int j=1;j<=n;++j) {
			read(arr[i][j]);
		}
	}
	for(int i=1;i<=m;++i) {
		for(int j=1;j<=n;++j) {
			for(int k = 1; k <= m; k++) {
				int l = 0;
				if(i+j-k> 0) l = i + j - k;
				else continue;
				if(i != k && j != l)
					f[i][j][k][l] = catt_max(f[i-1][j][k-1][l],f[i][j-1][k-1][l],f[i][j-1][k][l-1],f[i-1][j][k][l-1])+arr[i][j]+arr[k][l];
			}
		}
	}
	if(f[m][n-1][m-1][n]>f[m-1][n][m][n-1]) printf("%d", f[m][n-1][m-1][n]);
	else printf("%d", f[m-1][n][m][n-1]);
	fclose(stdin);fclose(stdout);
	return 0;
}