A1819 | 火星背包
时间限制2s
内存限制512MB
通过 / 提交0/0
题目描述
时间限制:2000ms
内存限制:512MB
在遥远的火星矿场上,有 $N$ 块重量和价值分别为 $w_i(1 \le i \le N)$ 和 $v_i(1 \le i \le N)$ 的矿石。
这些矿石都是相当沉重且宝贵的,以至于普通的背包难以装载。
不过,在这个星球上有一种特殊的背包,我们称之为 $\bf{火星背包}$,它能够承载总重量不超过 $M$ 的矿石。
你的任务是找到一种方法,在不超过背包承载能力的情况下,选取矿石,使得它们的总价值最高。
$\large{数据范围}$
- $1 \le N \le 40$
- $1 \le w_i, v_i, M \le 10^{15}$
- $1 \le w_i \le M$
输入格式
对于每个测试数据格式如下:
$w_1$ $v_1$
$w_2$ $v_2$
$\vdots$
$w_N$ $v_N$
$N$ $M$
$w_1$ $v_1$
$w_2$ $v_2$
$\vdots$
$w_N$ $v_N$
输出格式
答案的第一行为挑选的矿石总价值和数量。
第二行为挑选的矿石的编号。
若有多种最优方案,输出任意一种即可。
第二行为挑选的矿石的编号。
若有多种最优方案,输出任意一种即可。
输入输出样例
输入 #1
4 5 2 3 1 2 3 4 2 3
输出 #1
8 3 1 2 4
输入 #2
9 110 19 131 17 123 44 186 18 14 4 4 34 73 17 56 7 188 24 144
输出 #2
697 5 2 3 7 8 9
测试用例 $1$:
选取矿石 $[1, 2, 4]$ 需要的背包容量为 $2 + 1 + 2 = 5$,价值为 $3 + 2 + 3=8$。
无法通过选取其他矿石在背包容量允许的情况下,得到更大的价值。
选取矿石 $[1, 2, 4]$ 需要的背包容量为 $2 + 1 + 2 = 5$,价值为 $3 + 2 + 3=8$。
无法通过选取其他矿石在背包容量允许的情况下,得到更大的价值。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?