1 solutions

  • 0
    @ 2025-11-5 15:41:43

    C++ :

    #include <cstdio>
    
    #define  maxn  101
    
    int n , S , ans = 0 ; 
    int sum[maxn][maxn] = {0} ;
    
    int main()
    {
    	scanf("%d", &n );
    	int t ;
    	for (int i = 1 ; i <= n ; i ++ )
    	{
    		for (int j = 1 ; j <= n ; j ++ )
    		{
    			scanf("%d", &t ) ;
    			for (int p = i ; p <= n ; p ++ )
    			{
    				for (int q = j ; q <= n ; q ++ )
    				{
    					sum[p][q] += t ;
    					//printf("s[%d][%d] = %d\n",p,q,sum[p][q]);
    				}
    			}
    		}
    	}
    	scanf("%d", &S ) ;
    	if (S > n*n) S=n*n;
    	for (int s = 1 ; s <= S ; s ++ )
    	{
    		for (int a = 1 ; a <= s ; a ++ )
    		{
    			int b = s/a ;
    			if (a*b != s) continue ;
    			for (int i = 1 ; i <= n-a+1 ; i ++ )
    			{
    				for (int j = 1 ; j <= n-b+1 ; j ++ )
    				{
    					int i2 = i+a-1 , j2 = j+b-1 ;
    					int t = sum[i2][j2]-sum[i-1][j2]-sum[i2][j-1]+sum[i-1][j-1];
    					if (t > ans) ans = t ;
    				}
    			}
    		}
    	}
    	printf("%d\n",ans);
    	return 0 ;
    }
    

    Pascal :

    var
      n,i,j,k,k1,max,s,s1,i1:longint;
      g,a:array[0..100,0..100] of longint;
    begin
      
      readln(n);    
      for i:=1 to n do    
        begin
          for j:=1 to n do         
    	    begin         
    		  read(g[i,j]);         
    		  a[i,j]:=a[i-1,j-1];         
    		  for i1:=1 to i-1 do a[i,j]:=g[i1,j]+a[i,j];         
    		  for i1:=1 to j-1 do a[i,j]:=g[i,i1]+a[i,j];         
    		  a[i,j]:=a[i,j]+g[i,j];
             //统计从点(1,1)到点(i,j)的矩阵之和         
    		end;      
    	readln;    
       end;    
       readln(s1);    
       max:=0;    
       for i:=1 to n do    
       for j:=1 to n do      
         begin        
    	   for k:=0 to n-i do    //枚举长和宽        
    	   for k1:=0 to n-j do        
    	   if (k+1)*(k1+1)<=s1 then    //如果这样的矩形符合要求        
    	     begin          
    		   s:=a[i+k,j+k1]-a[i+k,j-1]-a[i-1,j+k1]+a[i-1,j-1];    //请参见注释          
    		   if s>max then max:=s;        
    		 end;     
    	 end;    
      writeln(max);    
      
    end.
    
    
    • 1

    Information

    ID
    17056
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By