#19255. 线粒体的能量预算

线粒体的能量预算

你好,我是阿西莫夫。

在细胞生物学中,线粒体(Mitochondria) 被称为细胞的“动力工厂”,它通过呼吸作用产生 ATP(三磷酸腺苷)。ATP 是生命活动的“通用货币”。

但是,细胞内的 ATP 存量并不是无限的。细胞每时每刻都面临着无数的需求:主动运输离子、合成蛋白质、进行细胞分裂、肌肉收缩……每一个动作都要消耗 ATP。

这就构成了一个最经典的 “资源分配问题”:在预算(ATP总量)有限的情况下,如何选择生理活动,使得细胞获得的生存效益最大化?

这正是 0/1 背包问题(0/1 Knapsack Problem) 的完美映射。


[OI 题库] 线粒体的“能量预算” (The Cell's Energy Budget)

题目背景

“ATP 是生命的硬通货,每一分子都必须花在刀刃上。”

你是一个细胞的“首席执行官”。你的线粒体刚刚通过有氧呼吸产生了一批 ATP,总能量值为 CC(Capacity)。

现在,细胞核下达了 NN 项紧急的生理任务(如合成某种酶、泵出钠离子等)。

  • ii 项任务需要消耗 wiw_i 的 ATP。
  • ii 项任务完成后,能为细胞带来 viv_i 的“生存价值”(Value)。
  • 每一项任务要么完全不做,要么做且仅做一次(0/1 选择)。

请你制定一个能量分配方案,在不超出 ATP 总预算的前提下,使细胞获得的生存价值总和最大。

题目描述

输入 ATP 总量 CC 和任务数量 NN。 接下来输入 NN 个任务的消耗 wiw_i 和价值 viv_i。 请输出最大可能的生存价值。

输入格式

第一行包含两个整数 C,NC, N

  • CC:ATP 总预算(背包容量)。
  • NN:任务数量(物品数量)。

接下来 NN 行,每行包含两个整数 wi,viw_i, v_i

  • wiw_i:第 ii 项任务消耗的 ATP。
  • viv_i:第 ii 项任务的生存价值。

输出格式

一个整数,表示最大的生存价值总和。

样例数据

样例 1

10 4
2 3
3 4
4 5
5 6
13

解析: 总 ATP = 10。

  • 方案 A:选任务 1, 2, 3。消耗 2+3+4=9102+3+4=9 \le 10。价值 3+4+5=123+4+5=12
  • 方案 B:选任务 1, 2, 4。消耗 2+3+5=10102+3+5=10 \le 10。价值 3+4+6=133+4+6=13
  • 方案 C:选任务 3, 4。消耗 4+5=9104+5=9 \le 10。价值 5+6=115+6=11。 最大价值为 13。

样例 2 (大任务)

5 3
10 100
10 100
10 100
0

解析:所有的任务消耗都超过了总预算 5,一个都做不了。

数据范围

  • 1C10001 \le C \le 1000 (ATP 总是有限的)
  • 1N1001 \le N \le 100
  • 1wi,vi10001 \le w_i, v_i \le 1000
  • 考察点:0/1 背包动态规划(一维数组优化)。