【牛客】寒假训练营1 H-01背包,但是bit 题解

传送门:01背包,但是bit
标签:动态规划

题目大意

共有n件物品,每件物品有价值vi与重量ui两个属性。但特别地,所选物品的总重量并不是每件物品的重量和,而是所有所选物品的重量进行按位或运算的结果。请你计算,在所选物品总重量不超过m的情况下,所选物品的最大价值之和是多少(价值之和正常定义为所选物品价值的加和)。
输入:T组数据(1<=T<=1e4),每组数据第一行两个正整数n,m(1<=n<=1e5,1<=m<=1e8),分别代表物品总数和背包容量。接下来n行每行包括两个正整数vi和ui(1<=vi,ui<=1e8),分别代表第i个物品的价值和重量。
输出:每组数据一个正整数,代表最大价值之和。

算法分析

  • 首先我们看到数据范围m最大为1e8就知道肯定不能用普通的背包。先从简单的结论思考,假设所有物品的重量按位或运算的结果不超过m,那么我们一定全部都选;假设有某一个数大于m,那么无论它与谁进行或运算都不可能使结果小于等于m,所以一定不能选。这么一想我们就会发现,只要有一个筛选的标准,确定哪些物品能选哪些不能选,接下来只要贪心就行了。
  • 如果我们要保证一些数按位或的结果(这里假设为x)不超过m,就只有两种可能。第一种可能是:二进制下x为1的位在m中都为1,即x|m=m。第二种可能:存在某一位在x中为1,在m中为0,但是存在比它更高的某一位在x中为0,在m中为1。显然第一种情况出现的概率比较小,第二种情况才是普遍情况,所以我们从它入手。
  • 既然要确定某一位在x中为0,在m中为1,我们不妨直接枚举(设为第i位)。那么对于任意比i更高的位j,都要满足xj<=mj,只有这样才能保证最终或运算结果不大于m。对于满足条件的物品,我们自然是全部取。枚举m的每一位只需最多30次,而遍历所有物品只要n次。考虑到枚举时每次都往后推一位,我们可以一开始先定义一个变量x=2n-1,然后让其每次减去自己的lowbit,就能得到前i位为0,而后面所有位为1的数字。再让其与m和每个物品的u进行与运算就能更快判断出哪些物品是合法的。

代码实现

#include <iostream>
using namespace std;
long long v[100005],u[100005];
#define lowbit(x) (x)&(-x)
int main(){long long i,j,x,n,m,T,sum,mx;ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--){cin>>n>>m;mx=0LL;x=(1<<30)-1;for(i=1;i<=n;i++)cin>>v[i]>>u[i];for(i=0;i<=29;i++){x-=lowbit(x);if((m&(1<<i))==0)continue;sum=0LL;for(j=1;j<=n;j++)if(((u[j]&(1<<i))==0)&&(((m&x)|(u[j]&x))==(m&x)))sum+=v[j];mx=max(mx,sum);}sum=0LL;for(j=1;j<=n;j++)if((m|u[j])==m)sum+=v[j];mx=max(mx,sum);cout<<mx<<'\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Compose 1.6 发布:性能大升级、拖放新功能、文本新变化...

翻译自&#xff1a; https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html 基于 1 月 24 号的 Compose 发行计划&#xff0c;我们正式推出了 Jetpack Compose 1.6 版本。 作为 Android 平台备受推崇的原生 UI 工具包&…

P4447 [AHOI2018初中组] 分组题解

题目 小可可的学校信息组总共有n个队员&#xff0c;每个人都有一个实力值。现在&#xff0c;一年一度的编程大赛就要到了&#xff0c;小可可的学校获得了若干个参赛名额&#xff0c;教练决定把学校信息组的n个队员分成若干个小组去参加这场比赛。 但是每个队员都不会愿意与实…

单例模式的优点和缺点分别是什么?

什么是单例模式与枚举饿汉式单例模式的区别是什么&#xff1f; 单例模式和枚举饿汉式单例模式都是设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。它们的区别在于实例的创建时间和线程安全性。 单例模式要求一个类只有一个实例&#xff0…

安全测试工具安装指南:在统信UOS上部署Burp Suite

原文链接&#xff1a;安全测试工具安装指南&#xff1a;在统信UOS上部署Burp Suite 大家好&#xff01;在网络安全领域&#xff0c;Burp Suite是一款不可或缺的工具&#xff0c;它提供了从初级映射和分析应用程序攻击面到查找和利用安全漏洞的一系列功能。今天&#xff0c;我将…

Shiro-05-shiro 基础知识补充密码学+哈希散列

密码学 密码术是隐藏或混淆数据的过程&#xff0c;因此窥探眼睛无法理解它。 Shiro的加密目标是简化JDK的加密支持并使之可用。 需要特别注意的是&#xff0c;密码通常不是特定于主题的&#xff0c;因此Shiro API的其中一个领域不是特定于主题的。 即使未使用“主题”&…

【elk查日志 elastic(kibana)】

文章目录 概要具体的使用方式一&#xff1a;查找接口调用历史二&#xff1a;查找自己的打印日志三&#xff1a;查找错误日志 概要 每次查日志&#xff0c;我都需要别人帮我&#xff0c;时间长了总觉得不好意思&#xff0c;所以这次下定决心好好的梳理一下&#xff0c;怎么查日…

spellman电源维修X3635系列CCM5P4X3635

Spellman高压发生器维修Perkin Elmer分析仪电源维修CCM5P4X3635 Perkin Elmer W102266 X射线高压发生器spellman电源维修X4297系列CT机高压电源维修CT42&#xff1b;CT70系列。SPELLMAN高压发生器应用于东芝CT机XVISION/EX、AUKLET系列、ASTEION系列、以及多排系列&#xff0c…

一文概括|CSC访问学者/博士后/联培申请及派出流程详解

为帮助申请者了解国家留学基金委&#xff08;CSC&#xff09;的政策&#xff0c;以及申报及派出的全过程&#xff0c;知识人网小编利用本文简略介绍并提出规划建议。 公派留学包括国家、地方&#xff08;含省市、行业、学校医院等单位&#xff09;资助派出。而国家公派则由留学…

HarmonyOS开发篇—数据管理(分布式数据服务)

分布式数据服务概述 分布式数据服务&#xff08;Distributed Data Service&#xff0c;DDS&#xff09; 为应用程序提供不同设备间数据库数据分布式的能力。通过调用分布式数据接口&#xff0c;应用程序将数据保存到分布式数据库中。通过结合帐号、应用和数据库三元组&#xf…

软件测试实训系统建设方案2024

软件测试实训室解决方案 一 、方案概述 软件测试实训解决方案是一个复杂且至关重要的过程&#xff0c;它确保了软件在开发过程中的各个模块能够正确地集成和交互。通过这一系列的测试步骤&#xff0c;开发团队能够及时发现并修复潜在的问题&#xff0c;从而提高软件的整体质量…

【漏洞复现-通达OA】通达OA share存在前台SQL注入漏洞

一、漏洞简介 通达OA&#xff08;Office Anywhere网络智能办公系统&#xff09;是由北京通达信科科技有限公司自主研发的协同办公自动化软件&#xff0c;是与中国企业管理实践相结合形成的综合管理办公平台。通达OA为各行业不同规模的众多用户提供信息化管理能力&#xff0c;包…

axios 官网速通

前言&#xff1a;参考 AXIOS 中文文档 一 起步 1. 介绍 1.1 Axios 是什么&#xff1f; Axios 是一个基于 promise 网络请求库&#xff0c;作用于 node.js 和浏览器中。在服务端使用 node.js 的 http 模块, 在客户端 (浏览端) 使用 XMLHttpRequests。 1.2 安装 $ npm instal…

【Java EE初阶十五】网络编程TCP/IP协议(二)

1. 关于TCP 1.1 TCP 的socket api tcp的socket api和U大片的socket api差异很大&#xff0c;但是和前面所讲的文件操作很密切的联系 下面主要讲解两个关键的类&#xff1a; 1、ServerSocket&#xff1a;给服务器使用的类&#xff0c;使用这个类来绑定端口号 2、Socket&#xf…

全网最容易理解的KMP算法讲解

引言 其实网上有很多讲解KMP算法的文章&#xff0c;详略不一&#xff0c;我认为有两点没有解释清楚&#xff1a; 第一点&#xff1a;匹配失败以后&#xff0c;模式串的位移 第二点&#xff1a;next数组的生成算法 希望本篇文章能将KMP算法清晰易懂的拆解开来。 暴力匹配 …

网络同步—帧同步和状态同步解析

概述 同步就是要多个客户端表现效果是一致的&#xff0c;而且对于大多数的游戏&#xff0c;不仅仅要表现一致&#xff0c;还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念&#xff0c;只有网络游戏才需要同步&#xff0c;而单机游戏是不需要同步的。 帧同步和…

算法-3-基本的数据结构

单双链表 1.单链表双链表如何反转 import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int…

掘根宝典之C++深复制与浅复制(复制构造函数,默认复制构造函数)

到目前为止我们已经学了构造函数&#xff0c;默认构造函数&#xff0c;析构函数&#xff1a;http://t.csdnimg.cn/EOQxx 转换函数&#xff0c;转换构造函数&#xff1a;http://t.csdnimg.cn/kiHo6 友元函数&#xff1a;http://t.csdnimg.cn/To8Tj 接下来我们来学习一个新函数…

python毕设选题 - 大数据全国疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的…

关于Http和Https

HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;超文本传输安全协议&#xff09;是用于在计算机之间传输数据的协议。它们是互联网上常见的两种通信协议&#xff0c;用于浏览器和服务器之间的数据传输。 HTTP&#xff08;超文本传输协议&#xff09;&#xff1…

2024阿里云云服务器ECS价格表出炉

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…