/* * main.cpp * * Created on: Feb 17, 2013 * Author: krassi */ #include #include #include #include using namespace std; typedef unsigned uint; const int max_n = 32; int a[max_n][max_n], s[max_n][max_n]; int sum(int i1, int j1, int i2, int j2) { return s[i2][j2] + s[i1][j1] - s[i1][j2] - s[i2][j1]; } int main(int argc, char **argv) { freopen("minark.in", "r", stdin); freopen("minark.out", "w", stdout); int n, m, k; scanf("%d%d%d", &n, &m, &k); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { scanf("%d", &a[i][j]); s[i+1][j+1] = s[i][j+1] + s[i+1][j] - s[i][j] + a[i][j]; } } int min_s = -1; for (int i1 = 0; i1 < n; ++i1) { for (int j1 = 0; j1 < m; ++j1) { for (int i2 = i1; i2 <= n; ++i2) { for (int j2 = j1; j2 <= m; ++j2) { int s = sum(i1, j1, i2, j2); if (s >= k) { int area = (i2 - i1) * (j2 - j1); if (min_s == -1 || min_s > area) { min_s = area; } } } } } } printf("%d\n", min_s); return 0; }