#include<climits> #include<algorithm> constint MAXN = 105; int n, m, mat[MAXN][MAXN]; bool(int r, int c){ staticint temp[MAXN][MAXN]; for (int i = 1; i <= n; i++) std::copy(mat[i] + 1, mat[i] + m + 1, temp[i] + 1); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { if (!temp[i][j]) continue; if (i + r - 1 > n && j + c - 1 > m) returnfalse; int t = temp[i][j]; for (int x = i; x < i + r; x++) for (int y = j; y < j + c; y++) { temp[x][y] -= t; if (temp[x][y] < 0) returnfalse; } } returntrue; } intmain(){ scanf("%d %d", &n, &m); int sum = 0; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) scanf("%d", &mat[i][j]), sum += mat[i][j]; int ans = INT_MAX; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { if (sum % (i * j) == 0 && sum / (i * j) < ans && check(i, j)) ans = sum / (i * j); } printf("%dn", ans); return0; }
近期评论