1 solutions
-
0
C++ :
#include<iostream> #include<algorithm> #include<string.h> using namespace std; const int N(55); int a[N][N],f[2*N][N][N]={0}; //ifstream cin("message.in"); //ofstream cout("message.out"); int big(int a,int b,int c,int d) { return max(max(a,b),max(c,d)); } int main() { int n,m; while (cin>>n>>m) { memset(f,sizeof(int)*2*N*N*N,0); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) cin>>a[i][j]; f[2][1][1]=a[1][1]; for (int k=3;k<n+m;k++) for (int x1=1;x1<n;x1++) for (int x2=x1+1;x2<=n;x2++) if (k-x2>=1&&k-x1<=m) f[k][x1][x2]=big(f[k-1][x1-1][x2-1],f[k-1][x1][x2], f[k-1][x1][x2-1],f[k-1][x1-1][x2])+a[x1][k-x1]+a[x2][k-x2]; cout<<f[n+m-1][n-1][n]<<endl; } return 0; }
Java :
import java.util.Scanner; public class Main { public static void main(String[] args) { int N=55; int[][] a = new int[N][N]; int[][][] f = new int[2*N][N][N]; Scanner in = new Scanner(System.in); int n, m; while (in.hasNext()) { n=in.nextInt(); m=in.nextInt(); //memset(f, * 2 * N * N * N, 0); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) a[i][j]=in.nextInt(); f[2][1][1] = a[1][1]; for (int k = 3; k < n + m; k++) for (int x1 = 1; x1 < n; x1++) for (int x2 = x1 + 1; x2 <= n; x2++) if (k - x2 >= 1 && k - x1 <= m) f[k][x1][x2] = big(f[k - 1][x1 - 1][x2 - 1], f[k - 1][x1][x2], f[k - 1][x1][x2 - 1], f[k - 1][x1 - 1][x2]) + a[x1][k - x1] + a[x2][k - x2]; System.out.println(f[n + m - 1][n - 1][n]); } } static int big(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; } }
- 1
Information
- ID
- 732
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By