本题卡常数,如果你 91 pts & TLE on #5,#9,看下面:
如果你的 dfs2 中采用了以下写法:
if(u >= n){
if(mp.count(sum))
for(int i = 0; i < mp[sum].size(); i++) vis[state | mp[sum][i]] = true;
return;
}
请将其改为:
if(u >= n){
if(mp.count(sum)){
auto cur = mp[sum];
int siz = cur.size();
for(int i = 0; i < siz; i++) vis[state | cur[i]] = true;
}
return;
}
TLE 原因:每遍历一次,都要从 map 中查找 sum,重复运行严重影响效率。