1 solutions
-
0
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