1 条题解
-
0
C++ :
#include<iostream> #include<algorithm> using namespace std; const int N = 55; int a[N][N],f[2*N][N][N]; int main(){ int m,n; cin>>m>>n; for (int i=1; i<=m; i++) for (int j=1; j<=n; j++) cin>>a[i][j]; for (int k=3; k<m+n; k++) for (int x1=1; x1<m; x1++) for (int x2=x1+1; x2<=m; x2++) if (k-x1>1 && k-x1<=n && k-x2>=1 && k-x2<n) { f[k][x1][x2]=max(f[k][x1][x2],f[k-1][x1][x2]); f[k][x1][x2]=max(f[k][x1][x2],f[k-1][x1][x2-1]); f[k][x1][x2]=max(f[k][x1][x2],f[k-1][x1-1][x2]); f[k][x1][x2]=max(f[k][x1][x2],f[k-1][x1-1][x2-1]); f[k][x1][x2]+=a[x1][k-x1]+a[x2][k-x2]; } cout<<f[m+n-1][m-1][m]<<endl; return 0; }
Pascal :
var f:array[-50..101,-50..51,-50..51]of longint; a:array[-100..100,-100..100]of longint; n,i,j,k,m,maxn,s,minn,xxx:longint; function max(a,b:longint):longint; begin if a>b then max:=a else max:=b end; begin {assign(input,'message.in'); reset(input); assign9output,'message.out'); rewrite(output);} readln(n,m); for i:=1 to n do for j:=1 to m do read(a[i,j]); fillchar(f,sizeof(f),0); xxx:=m+n-2; for k:=2 to xxx do begin for i:=1 to n do for j:=i+1 to n do begin if abs(j-i) > 1 then begin f[k,i,j]:=max(f[k-1,i,j],f[k-1,i,j-1]); f[k,i,j]:=max(f[k,i,j],f[k-1,i-1,j]); f[k,i,j]:=max(f[k,i,j],f[k-1,i-1,j-1]); inc(f[k,i,j],a[i,k+1-i]+a[j,k+1-j]); end else begin f[k,i,j]:=max(f[k-1,i,j],f[k-1,i-1,j-1]); f[k,i,j]:=max(f[k,i,j],f[k-1,i-1,j]); inc(f[k,i,j],a[i,k+1-i]+a[j,k+1-j]); end; end; end; writeln(f[xxx,n-1,n]); {close(input); rewrite(output);} end.
- 1
信息
- ID
- 818
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者