#6964. 仓库调拨(transfer)

仓库调拨(transfer)

仓库调拨(transfer)

题目描述

某物资中心正在为一支考察队准备运输物资。

运输箱的最大承重为 (V),仓库中共有 (n) 种不同的物资。

第 (i) 种物资的重量为 (w_i),价值为 (v_i)。

由于仓库采用特殊的库存管理制度,每种物资的可调拨数量由其重量决定:

  • 如果物资的重量是一个质数,那么该种物资库存充足,可以调拨任意非负整数件。
  • 如果物资的重量不是质数,那么该种物资仅有一件,最多只能调拨一次。

特别地,(1) 不是质数。

你可以从仓库中选择若干件物资放入运输箱,也可以不选择任何物资。

要求所有选中物资的总重量不超过 (V)。

请计算运输箱中能够装入的物资的最大总价值。

输入格式

第一行包含两个正整数 (V,n),分别表示运输箱的最大承重和物资种类数。

接下来 (n) 行,每行包含两个正整数 (w_i,v_i),分别表示第 (i) 种物资的重量和价值。

输出格式

输出一行一个整数,表示能够获得的最大总价值。

输入输出样例 #1

输入 #1

10 3
2 3
4 9
5 8

输出 #1

18

样例解释

三种物资的重量分别为 (2,4,5)。

其中,重量为 (2) 和 (5) 的物资可以重复选择,重量为 (4) 的物资最多只能选择一次。

一种最优方案是:

  • 选择 3 件重量为 2、价值为 3 的物资;
  • 选择 1 件重量为 4、价值为 9 的物资。

总重量为:

2×3+4=102\times3+4=10

总价值为:

3×3+9=183\times3+9=18

因此输出 (18)。

输入输出样例 #2

输入 #2

8 1
4 7

输出 #2

7

样例解释

物资重量为 4,不是质数,因此最多只能选择一件。

虽然运输箱容量为 8,但不能重复选择该物资。

数据范围

对于全部测试数据,保证:

  • (1≤n≤100)(1\le n\le100)
  • (1≤V≤20000)(1\le V\le20000)
  • (1≤wi≤20000)(1\le w_i\le20000)
  • (1≤vi≤10000)(1\le v_i\le10000)

不同种类的物资可以具有相同的重量或价值,它们仍然视为不同种类。

如果某种物资的重量超过运输箱容量,则该种物资无法被选择。

时间限制: 建议 1 秒
空间限制: 建议 128 MB

测试点编号 层级 V n 特殊性质与数据特征 标准输出 设计目的
1 弱数据 1 1 最小容量;重量 1 非质数 7 检查最小规模及 1 的质数判断
2 6 仅含质数重量 2 9 检查完全背包能否重复选择
3 8 2 质数与非质数重量混合 18 检查两类背包的组合选择
4 7 3 含重量超过容量、恰好装满 13 检查不可选物品和容量边界
5 正常数据 8 两个相同的非质数重量物品 14 检查不同物品可各选一次,防止误当成同一物品
6 17 4 多种质数重量竞争,容量存在余数 28 检查完全背包组合最优解
7 20 多个质数、非质数物品混合 44 检查混合转移及非贪心选择
8 30 6 重量 1、质数 2/13 与多个合数 232 卡质数判断、0/1 限制和高价值组合
9 极限数据 20000 4 最大容量;单价接近 int 上限 20000147483647 检查 long long,可卡答案使用 int 的程序
10 20 最大容量、多物品、大价值、复杂混合 4000000750 综合压力测试,检查质数判断、转移方向和大数答案