問題:http://www.topcoder.com/stat?c=problem_statement&pm=11310
プラクティス.
ある大きさのキャンバスに描くべき絵を描くことができる正方形の筆の最大の大きさを求める.
試し塗りをしてゆけばいいらしい.
コード
public class Painting { public int largestBrush(String[] picture) { int n = picture.length, m = picture[0].length(); char[][] cs = new char[n][]; for (int i = 0; i < n; ++i) { cs[i] = picture[i].toCharArray(); } int size = Math.min(n, m); l1: for (; size > 0; --size) { boolean[][] painted = new boolean[n][m]; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { boolean isPaintable = i + size <= n && j + size <= m; if (isPaintable) l2: for (int x = i; x < i + size; ++x) { for (int y = j; y < j + size; ++y) { if (cs[x][y] == 'W') { isPaintable = false; break l2; } } } if (isPaintable) { for (int x = i; x < n && x < i + size; ++x) { for (int y = j; y < m && y < j + size; ++y) { painted[x][y] = true; } } } } } for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (!painted[i][j] && cs[i][j] == 'B') { continue l1; } } } break; } return size; } }