比赛 |
防止浮躁的小练习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;
}