\(设最后的答案为t,那么有\) $$2^+2^+...2^+tp=n$$ \(那我们完全可以枚举这个t,判断n-tp(我们下面记为z)能刚好被t个二进制表示\) \(首先,z如果小于t,那一定无法表示,因为每一个二进制最小是2^0=1,t个二进制最小是t\) \(然后,我们数一下z的二进制1的个数,假如t不够的话也不行.\) \(为什么?因为二进制高位的1可以由低位的1补齐,所以t大了没事,但不能比z的二进制1个数少.\) #include <bits/stdc++.h> using nam…