当前位置: 首页 > news >正文

牛客小白月赛94 EF题解

题目描述 

注:此版本为本题的hard(困难版),与easy(简单版)唯一的不同之处只有数据范围。
 

小苯有一个容量为 k 的背包,现在有 n 个物品,每个物品有一个体积 v 和价值 w,他想知道在体积不超过 k 的前提下,他最多能装价值为多少的物品。

本问题中,物品的总体积定义为所装物品的体积的 &&(按位与),总价值也定义为所装物品的价值的 &&(按位与)。

(如果不选物品,则价值为 0,所占体积也为 0。)

输入描述:

输入包含 n+1 行。
第一行两个正整数  n,k (1≤n≤2×105,0≤k≤109),分别表示物品个数和背包容量。
加下来 n 行,每行两个正整数 vi​,wi​ (0≤vi​,wi​≤109),表示每个物品的体积和价值。

输出描述:

输出包含一行一个整数,表示能装的最大价值。

示例1

输入

复制

3 1
7 3
10 7
9 6

输出

复制

2

说明

选择第一个和第三个物品。
体积为:7 & 9=17 & 9=1。
价值为:3 & 6=23 & 6=2。可以证明不存在比 22 更大的价值。

示例2

输入

复制

3 2
7 3
10 7
9 6

输出

复制

3

说明

选第一个和第二个物品。

思路:
由于体积和价值选的越多越小,一般背包思路不行

本题采用&运算,反向思路求最多价值,即每一位尽量为1

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){int n,k;cin>>n>>k;int v[n+1],w[n+1];int ans=0;for(int i=1;i<=n;++i)cin>>v[i]>>w[i];for(int i=30;i>=0;i--){//从高位开始枚举,确保价值最高int num=(1L<<30)-1;//初始化最大体积,由于&运算,选的越多体积越小int g=ans|(1<<i);//将第i位变1,继承其他位置for(int j=1;j<=n;++j){if((g&w[j])==g)num=num&v[j];//第i位是1就选}if(num<=k){//体积不超过kans=g;//ans肯定是越来越大的,每次满足第i为变1}}cout<<ans<<endl;
}

http://www.lryc.cn/news/356533.html

相关文章:

  • 大数据开发面试题【Flink篇】
  • Java技术深度解析:高级面试问题与精粹答案(二)
  • 算数运算符
  • 闲话 .NET(3):.NET Framework 的缺点
  • WPF实现简单的3D图形
  • 设计模式之创建型模式---原型模式(ProtoType)
  • git命令新建远程仓库
  • Defog发布Llama-3-SQLCoder-8B,文本转SQL模型,性能比肩GPT-4,准确率超90%,消费级硬件可运行
  • 防刷发送短信验证码接口的五种简单好用方法绝对够用
  • ubuntu中idea创建spark项目步骤
  • 回文链表(快慢指针解法之在推进过程中反转)
  • 深度剖析:为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解
  • 【接口自动化_05课_Pytest接口自动化简单封装与Logging应用】
  • 信息学奥赛初赛天天练-14-阅读程序-字符数组、唯一分解定理应用
  • K210 数字识别 笔记
  • 人脸检测--FaceNet(四)
  • Android性能优化方案
  • 视频监控平台AS-V1000 的场景管理,一键查看多画面视频的场景配置、调用、管理(一键浏览多路视频)
  • 微服务架构五大设计模式详解,助你领跑行业
  • 【problem】解决EasyExcel导出日期数据显示为#####问题
  • Pytest用例自定义 - 重复、并行、串行
  • 前端项目上线
  • redis基本数据结构与应用
  • Python pands使用引擎实现excel条件格式
  • 基于 vuestic-ui 实战教程 - 登录篇
  • SAPUI5基础知识2 - 手动创建一个SAPUI5的项目
  • 设计模式--访问者模式
  • onnx模型转换到rknn脚本
  • 防御恶意爬虫攻击
  • 【自动驾驶技术栈学习】2-软件《大话自动驾驶》| 综述要点总结 by.Akaxi