二进制枚举

小数目的事务的所有情况枚举,n个数枚举所有在哪些区域上我们需要的情况,这一共有 2^{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;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值