需要频繁的对一些数进行加法操作,这时把所有数看成是二进制当中的一位,进行左移运算即是加法
const int N = 1e5 + 10;
class Solution {
public:
int maxTotalReward(vector<int>& re) {
sort(re.begin(),re.end());
bitset<N> bit, temp;
bit[0] = 1;
int x = 0;
for(auto c : re)
{
//防止冲的太猛,因为大于c的数是不能使用的
while(x < c)temp[x] = 1,x ++;
bit |= (bit & temp) << c;
}
for(int i = N - 1; i >= 0;i --)if(bit[i])return i;
return 1;
}
};
bitset一些常用操作
二进制形式初始化,不能出现2,否则报错
bitset<N> bit("1010");
输出2
cout << bit.count();
十进制形式初始化
bitset<N> bit(100);
//输出3,因为100的二进制1100100
cout << bit.count();