本文介绍: 思路:找出所有m的子集,加到价值中,找出最大价值即可。
思路:找出所有m的子集,加到价值中,找出最大价值即可。
代码:
void solve(){
int n, m;
cin >> n >> m;
vector<pii>a(n + 1);
for(int i = 1;i <= n;i ++)
cin >> a[i].first >> a[i].second;
int ans = 0;
auto check = [&](int x){
int res = 0;
for(int i = 1;i <= n;i ++){
if((x & a[i].second) == a[i].second)
res += a[i].first;
}
ans = max(ans, res);
};
for(int i = 29;i >= 1;i --){
if((m >> i) & 1){
check((m ^ (1 << i)) | ((1 << i) - 1));
}
}
check(m);
cout << ans << endl;
}
原文地址:https://blog.csdn.net/weixin_73550568/article/details/136017862
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_65907.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。