1 solutions

  • 0
    @ 2024-12-11 0:49:29

    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