問題:http://codeforces.com/contest/48/problem/B
参加形式:本番
ある大きさの長方形が0と1で埋められているので,与えられた大きさのその部分長方形に含まれる1の数の最小値を求める.
DP的な何か.左上から書くマスまでの長方形の合計値を計算しておき,求める長方形の大きさを求めて最小値を出力.
import java.util.*; public class B_LandLot { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(), m = s.nextInt(); int[][] v = new int[n+1][m+1]; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { v[i][j] = v[i-1][j] + v[i][j-1] -v[i-1][j-1] + s.nextInt(); } } int a = s.nextInt(), b = s.nextInt(); int min = Integer.MAX_VALUE; for(int i = a; i <= n; ++i){ for(int j = b; j <= m; ++j){ min = Math.min(min, v[i][j] - v[i-a][j] - v[i][j-b] + v[i-a][j-b]); } } for(int i = b; i <= n; ++i){ for(int j = a; j <= m; ++j){ min = Math.min(min, v[i][j] - v[i-b][j] - v[i][j-a] + v[i-b][j-a]); } } System.out.println(min); } }