どうせ探索問題だろうとおもったのが、すべての敗因でした。このやり方知ってるのに出て来なかったのは悔しい。ばか、もうほんとばか。
int cnt[31][31];
class DropCoins {
public:
int getMinimum(vector<string> board, int K) {
int r = board.size();
int c = board[0].length();
int ret = INF;
memset(cnt, 0, sizeof(cnt));
FOR (i, 1, r+1) FOR (j, 1, c+1) {
cnt[i][j] = cnt[i-1][j] + cnt[i][j-1] - cnt[i-1][j-1] + (board[i-1][j-1] == 'o');
}
FOR (i, 1, r+1) FOR (j, 1, c+1) FOR (it, i, r+1) FOR (jt, j, c+1) {
int x = cnt[it][jt] + cnt[i-1][j-1] - cnt[it][j-1] - cnt[i-1][jt];
if (x == K) {
int ans = (i-1)+(j-1)
+ (r-it)+(c-jt)
+ min(i-1, r-it)
+ min(j-1, c-jt);
ret = min(ret, ans);
}
}
if (ret == INF) return -1;
return ret;
}
};
0 件のコメント:
コメントを投稿