1 solutions

  • 0
    @ 2025-11-5 14:59:31

    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