小数目的事务的所有情况枚举,n个数枚举所有在哪些区域上我们需要的情况,这一共有 种不同的情况。
for(int i = 0; i < (1<<n); i++) //从0~2^n-1个状态
{
for(int j = 0; j < n; j++) //遍历二进制的每一位
{
if(i & (1 << j))//判断二进制第j位是否存在
{
}
}
}
例
class Solution {
public:
vector<int> maximumBobPoints(int numArrows, vector<int>& aliceArrows) {
// 二进制枚举
int n = aliceArrows.size(), maxx = 0;
vector<int> ac;
for(int i = 0; i < (1 << n); i++){
vector<int> vc(12, 0);
int s = 0, cnt = 0;
for(int j = 1; j < n; j++){
if(i & (1 << j)){
vc[j] = aliceArrows[j] + 1;
cnt += aliceArrows[j] + 1;
s += j;
}
}
if(cnt <= numArrows && s > maxx){
maxx = s;
vc[0] = numArrows - cnt;
ac = vc;
}
}
return ac;
}
};