問題
http://community.topcoder.com/stat?c=problem_statement&pm=10154&rd=13694
1と0からなるランプが複数並べられている。
各ランプは1行から成り、すべてのランプが一列に並べられている。
ランプの値がすべて1となったとき、そのランプは点灯する。
プレイヤーはK回、一つの列を選んでそのすべての値を反転させる。
このとき、点灯するランプが最大となるときのそのランプ数を求める。
解き方
01の並びがまったく同じランプだけが、最終的に同時に点灯する可能性がある。
すべての並びのランプについて、その0の値とKの値によってすべて点灯させられるか
確かめればよい。
コード
class LampsGrid {
public: int mostLit(vector<string> initial, int K) {
int n=initial.size(),m=initial[0].size();
int ret=0;
FORE(i,0,n){
int cnt=0,num=0;
FORE(j,0,n)if(initial[i]==initial[j])cnt++;
FORE(j,0,m)if(initial[i][j]=='0')num++;
if(K>=num && (K-num)%2==0)ret=max(ret,cnt);
}
return ret;
}
};
public: int mostLit(vector<string> initial, int K) {
int n=initial.size(),m=initial[0].size();
int ret=0;
FORE(i,0,n){
int cnt=0,num=0;
FORE(j,0,n)if(initial[i]==initial[j])cnt++;
FORE(j,0,m)if(initial[i][j]=='0')num++;
if(K>=num && (K-num)%2==0)ret=max(ret,cnt);
}
return ret;
}
};