Hatena::Grouptopcoder

kojingharangの日記 RSSフィード

 | 

2013-03-02

TCO Round1B 500 EllysFigurines

05:12 |  TCO Round1B 500 EllysFigurines - kojingharangの日記 を含むブックマーク はてなブックマーク -  TCO Round1B 500 EllysFigurines - kojingharangの日記  TCO Round1B 500 EllysFigurines - kojingharangの日記 のブックマークコメント

  • 15x15 以内の白黒ビットマップが与えられる。1回に 1~R 行または 1~C 列分、白にできる。最小何回で全部白にできるか。
  • 全然思いつかない
  • dp[x][y][w][h] で [x,x+w) x [y,y+h) を白にする最小回数?とか思って書いてみる
  • バグってるうちに終了
  • そもそもこれはだめだ(領域を分断すると本来1回で消せても2回以上に分割されちゃうことがある)
  • あとで
  • 消す行たち(最大2**15 通り)を決めると黒が残ってる列が決まって、それらを左から順に消してけば回数が出る
  • 気が付かなかった。。
  • ↓あとで(accepted in practice room)
class EllysFigurines {
	public:
	int getMoves(vector<string> B, int R, int C) {
		int W=B[0].size();
		int H=B.size();
		int ans = 1<<30;
		REP(bit, 1<<H) {
			int lans=0;
			int rmy[20]={};
			int rest[20]={};
			REP(y, H) {
				if((bit>>y)&1) {
					lans++;
					REP(i, R) if(y+i<H) rmy[y+i]=1;
				}
				if(!rmy[y]) REP(x, W) if(B[y][x]=='X') rest[x]=1;
			}
			REP(x, W) {
				if(rest[x]) {
					lans++;
					x+=C-1;
				}
			}
			ans=min(ans, lans);
		}
		return ans;
	}
};
 |