P15562 [CCPC 2025 哈尔滨站] 01 背包
题目描述
01 背包问题是一个算法竞赛中经典的组合优化的问题,小 w 学会了一种求解该问题的贪心算法。01 背包问题的定义以及小 w 的贪心算法如下。
$\textbf{01 背包问题}$:
给定 $n$ 个物品,物品的重量分别为正整数 $w_1,w_2,\ldots,w_n$ ,物品的价值分别为正整数 $v_1,v_2,\ldots,v_n$,再给定背包容量 $W$。要求 $x_1,x_2,\ldots,x_n$ ($\forall 1 \le i \le n$, $x_i \in \{0,1\}$),满足:
$$
\sum_{i=1}^n w_ix_i \le W
$$
并最大化:
$$
V = \sum_{i=1}^n v_ix_i
$$
$\textbf{贪心算法}$:
1. 将 $n$ 个物品按照 $\frac{v_i}{w_i}$ 的值从大到小排序,$\frac{v_i}{w_i}$ 相同则按照 $w_i$ 从大到小排序。
2. 设一初始置 0 的变量 $W_0$,并,并从 $1$ 到 $n$ 枚举 $i$,如果 $V_0+w_i \le W$,则置 $x_i \leftarrow 1, W_0 \leftarrow W_0 + w_i$,否则置 $x_i \leftarrow 0$。
3. 枚举完之后即可得到所求的 $x_1,x_2,\ldots,x_n$ 以及 $V$。
你当然知道这个算法是错误的,但小 w 并不相信。即使你给了小 w 一些反例,小 w 依然认为这个算法能在很多不同的 $W$ 下都能得到最优的 $V$,所以你现在希望构造一组 $w_1,w_2,\ldots,w_n$ 以及 $v_1,v_2,\ldots,v_n$ 使得:
1. $\forall 2 \le W \le W_{lim}$($W_{lim}$ 是一个给定的常数),小 w 的算法都无法得到最优的 $V$。
2. 在满足条件 $1$ 的情况下,$n$ 尽量小。
3. 在满足条件 $1,2$ 的情况下,$\max(w_1,w_2,\ldots,w_n)$ 尽量小。
4. 在满足条件 $1,2,3$ 的情况下,$\max(v_1,v_2,\ldots,v_n)$ 尽量小。
现在你需要构造一组满足上述条件的 01 背包来说服小 w,你能做到吗?如果构造方法有多种,你可以输出任意一种。
输入格式
输入共一行包含一个整数 $W_{lim}$ ($2 \le W_{lim} \le 5 \times 10^3$),表示 $W$ 的上界。
输出格式
输出第一行包含一个整数 $n$ ($1 \le n \le 10^4$),表示构造的 01 背包的物品数量。
第二行输出 $n$ 个整数 $w_1,w_2,\ldots,w_n$ ($1 \le w_i \le W_{lim}$) 表示物品的重量。
第三行输出 $n$ 个整数 $v_1,v_2,\ldots,v_n$ ($1 \le v_i \le 10^9$) 表示物品的价值。
可以证明,在给定的问题以及输入条件下,总能找到满足上述数据范围的解。