1 条题解

  • 0
    @ 2025-2-14 21:20:42

    C :

    #include<stdio.h>
    int m,n,a[51][51];
    int f[51][51][51][51];
    int my_max(int,int,int,int);
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    		for(int i1=1;i1<=n;i1++)
    			for(int j1=1;j1<=m;j1++)
    				for(int i2=1;i2<=n;i2++)
    					for(int j2=1;j2<=m;j2++)
    					{
    						f[i1][j1][i2][j2]=my_max(f[i1-1][j1][i2][j2-1],
    											  f[i1-1][j1][i2-1][j2],
    											  f[i1][j1-1][i2-1][j2],
    											  f[i1][j1-1][i2][j2-1]);
    						f[i1][j1][i2][j2]+=a[i1][j1];
    						if(i1!=i2||j1!=j2)  f[i1][j1][i2][j2]+=a[i2][j2];
    					}
    		printf("%d",f[n][m][n][m]);
    }
    int my_max(int a,int b,int c,int d)
    {
    	int tot=0;
    	if(tot<a) tot=a;
    	if(tot<b) tot=b;
    	if(tot<c) tot=c;
    	if(tot<d) tot=d;
    	return tot;
    }
    

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    const int maxn=51;
    int m,n,a[maxn][maxn],f[maxn][maxn][maxn][maxn]={0};
    int my_max(int,int);
    void work();
    int main()
    {
    	//freopen("message3.in","r",stdin);
    	work();
    	return 0;
    }
    void work()
    {
    	cin>>m>>n;
    	for(int i=1;i<=m;i++)
    		for(int j=1;j<=n;j++)cin>>a[i][j];
    	for(int i1=1;i1<=m;i1++)
    		for(int j1=1;j1<=n;j1++)
    			for(int i2=1;i2<=m;i2++)
    				for(int j2=1;j2<=n;j2++)
    				if(i1!=i2&&j1!=j2)
    				{
    					int x=my_max(f[i1-1][j1][i2-1][j2],f[i1][j1-1][i2][j2-1]);
    					int y=my_max(f[i1-1][j1][i2][j2-1],f[i1][j1-1][i2-1][j2]);
    					f[i1][j1][i2][j2]=my_max(x,y)+a[i1][j1]+a[i2][j2];
    					//cout<<i1<<' '<<j1<<' '<<i2<<' '<<j2<<' '<<x<<' '<<y<<endl;
    				}
    	cout<<my_max(f[m][n-1][m-1][n],f[m-1][n][m][n-1])<<endl;
    }
    int my_max(int x,int y)
    {
    	if(x>y)return x;
    	else return y;
    }
    

    Pascal :

    var m,n,i,j,k:integer;
        a:array[1..50,1..50]of integer;
        f:array[1..100,0..50,0..50]of longint;
    function max(a,b,c,d:longint):longint;
    begin
      max:=-1;
      if a>max then max:=a;
      if b>max then max:=b;
      if c>max then max:=c;
      if d>max then max:=d;
    end;
    begin
      readln(m,n);
      for i:=1 to m do
        for j:=1 to n do read(a[i,j]);
      for i:=2 to m+n-1 do
       for j:=1 to m do
        for k:=1 to m do
         if (i+1-j>0)and(i+1-k>0) then
           begin
            f[i,j,k]:=max(f[i-1,j-1,k-1],f[i-1,j-1,k],f[i-1,j,k-1],f[i-1,j,k]);
            if (j<>k) then inc(f[i,j,k],a[j,i+1-j]+a[k,i+1-k])
             else inc(f[i,j,k],a[j,i+1-j]);
           end;
      writeln(f[m+n-1,m,m]);
    end.
    
    
    • 1

    信息

    ID
    835
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者