1 solutions
-
0
C :
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> int map[55][56],f[55][55][55][55]; int max(int a,int b) { return a>b?a:b; } int main() { int n,m,i,j,k,l; scanf("%d%d",&n,&m); for(i = 1 ; i <= n ; i++) for(j = 1 ; j <= m ; j++) { scanf("%d",&map[i][j]); } memset(f,0,sizeof(f)); for(i = 1; i <= n; i++) for(j = 1 ; j <= m ; j++) for( k = 1 ; k <= n ;k ++) for(l =1 ; l <= m ; l ++) { if((i<n||j<m)&&(i<=k)&&j<=l) continue; int sum = 0 ; sum = max(f[i-1][j][k-1][l],sum); sum = max(f[i][j-1][k][l-1],sum); if(i-1!=k&&j!=l-1) sum = max(f[i-1][j][k][l-1],sum); if(i!=k-1&&j-1!=l) sum = max(f[i][j-1][k-1][l],sum); f[i][j][k][l]= sum + map[i][j]+map[k][l]; } printf("%d\n",f[n][m][n][m]); return 0; }C++ :
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[102][51][51],a[51][51]; int main() { int x,i,j,k,t; int n,m; scanf("%d %d",&n,&m); memset(dp,0,sizeof(dp)); for(i=1;i<=n;++i) for(j=1;j<=m;++j) scanf("%d",&a[i][j]); for(k=3;k<n+m;k++) for(i=1;i<=n;++i) for(j=i+1;j<=n;++j) { if(k-i<1||k-j<1) break; if(k-i>m||k-j>m) continue; dp[k][i][j] = max(max(dp[k-1][i-1][j],dp[k-1][i-1][j-1]),max(dp[k-1][i][j-1],dp[k-1][i][j])); dp[k][i][j] +=a[i][k-i]+a[j][k-j]; } t=n+m; dp[t][n][n] = max(max(dp[t-1][n-1][n],dp[t-1][n-1][n-1]),max(dp[t-1][n][n-1],dp[n-1][n][n])); printf("%d\n",dp[t][n][n]); 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
Information
- ID
- 16305
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By