pair<int,bitset<N>>dat[N];
int cmp(pair<int,bitset<N>>&x,pair<int,bitset<N>>&y){
return x.second.count()>y.second.count();
}
void Sort(int start){
sort(dat+start,dat+m+1,cmp);
}
for(int i=1;i<=m;i++){
dat[i].first=i,dat[i].second.reset();
for(int j=1;j<=n;j++){
if(legal(j,i)){
dat[i].second[j]=1;
}
else{
dat[i].second[j]=0;
}
}
}
Sort(1);
for(int i=1;i<=m;i++){
if(dat[i].second.count()){
ans++;
auto tmp=dat[i].second;
for(int j=1;j<=n;j++){
tmp[j]=!tmp[j];
}
for(int j=i+1;j<=m;j++){
dat[j].second&=tmp;
}
}
else{
break;
}
Sort(i+1);
}
cout<<m-ans<<'\n';
这是一份基于1的个数排序的贪心 贪心是有正确性的 可是你也看到了 我每次并没有清空当前选出的bitset 下一次也只初始化到了n 就导致可能会残留上一组的1 导致count出错 导致排序出错 进而导致答案错误 但对于我写的40 这有30 好强的官方数据 可怕!