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

宝物筛选(二进制优化多重背包)

宝物筛选(二进制优化多重背包)

题目描述

终于,破解了千年的难题。小 FF 找到了王室的宝物室,里面堆满了无数价值连城的宝物。

这下小 FF 可发财了,嘎嘎。但是这里的宝物实在是太多了,小 FF 的采集车似乎装不下那么多宝物。看来小 FF 只能含泪舍弃其中的一部分宝物了。

小 FF 对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小 FF 有一个最大载重为 W W W 的采集车,洞穴里总共有 n n n 种宝物,每种宝物的价值为 v i v_i vi,重量为 w i w_i wi,每种宝物有 m i m_i mi 件。小 FF 希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。

输入格式

第一行为一个整数 n n n W W W,分别表示宝物种数和采集车的最大载重。

接下来 n n n 行每行三个整数 v i , w i , m i v_i,w_i,m_i vi,wi,mi

输出格式

输出仅一个整数,表示在采集车不超载的情况下收集的宝物的最大价值。

样例 #1

样例输入 #1

4 20
3 9 3
5 9 1
9 4 2
8 1 3

样例输出 #1

47

提示

对于 30 % 30\% 30% 的数据, n ≤ ∑ m i ≤ 1 0 4 n\leq \sum m_i\leq 10^4 nmi104 0 ≤ W ≤ 1 0 3 0\le W\leq 10^3 0W103

对于 100 % 100\% 100% 的数据, n ≤ ∑ m i ≤ 1 0 5 n\leq \sum m_i \leq 10^5 nmi105 0 ≤ W ≤ 4 × 1 0 4 0\le W\leq 4\times 10^4 0W4×104 1 ≤ n ≤ 100 1\leq n\le 100 1n100

首先裸的多重背包板子可以拿到50分,在第7组数据中TLE。

//50分代码
int n, m;
int u[N], v[N], w[N];
int f[N];void solve()
{cin >> n >> m;for (int i = 1; i <= n; i++)cin >> v[i] >> w[i] >> u[i];for (int i = 1; i <= n; i++){for (int j = m; j >= 0; j--)for (int k = 0; k * w[i] <= j && k <= u[i]; k++){f[j] = max(f[j], f[j - k * w[i]] + k * v[i]);}}cout << f[m] << "\n";
}

很明显这个多重背包需要讲每组背包进行二进制拆分,转换成01背包。

//100分代码
int n, m;
int x, y, z;
int f[N];
int len, v[N], w[N];void solve()
{cin >> n >> m;for (int i = 1; i <= n; i++){cin >> x >> y >> z;int p = 1;while (z > p){v[++len] = p * x;w[len] = p * y;z -= p;p <<= 1;}v[++len] = z * x;w[len] = z * y;}for (int i = 1; i <= len; i++)for (int j = m; j >= w[i]; j--)f[j] = max(f[j], f[j - w[i]] + v[i]);cout << f[m] << "\n";
}

相关文章:

  • 数据结构与算法:图形数据结构
  • 解决弹性布局父元素设置高自动换行,子元素均分高度问题(align-content: flex-start)
  • 【思路】短链生成及访问
  • vivo 基于 StarRocks 构建实时大数据分析平台,为业务搭建数据桥梁
  • 获取视频第一帧,以及后续上传
  • Zabbix 6.2.1 安装
  • Jenkins解决Host key verification failed (2)
  • RandAugment(NeurIPS 2020)论文速读
  • C++学习规划“的 PPT 大纲设计
  • sql注入 [极客大挑战 2019]FinalSQL1
  • hbuilderx创建、运行uni-app
  • B树的介绍
  • xxl-job架构原理讲解
  • 剑指offer面试题18 树的子结构
  • C语言:指针的进阶讲解
  • [PHP内核探索]PHP中的哈希表
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 「译」Node.js Streams 基础
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 2017前端实习生面试总结
  • 30秒的PHP代码片段(1)数组 - Array
  • Angular6错误 Service: No provider for Renderer2
  • CSS居中完全指南——构建CSS居中决策树
  • gcc介绍及安装
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • nodejs实现webservice问题总结
  • Vue学习第二天
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 给新手的新浪微博 SDK 集成教程【一】
  • 基于遗传算法的优化问题求解
  • 记录:CentOS7.2配置LNMP环境记录
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前嗅ForeSpider教程:创建模板
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何利用MongoDB打造TOP榜小程序
  • 什么软件可以剪辑音乐?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 学习ES6 变量的解构赋值
  • 移动端 h5开发相关内容总结(三)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 《码出高效》学习笔记与书中错误记录
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​linux启动进程的方式
  • #if和#ifdef区别
  • #include到底该写在哪
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (poj1.3.2)1791(构造法模拟)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)springcloud实战之config配置中心
  • (附源码)ssm教材管理系统 毕业设计 011229