题目描述
问题背景
01 背包问题是算法竞赛中经典的组合优化问题,小 W 学会了一种求解该问题的贪心算法。现需要构造一组数据,证明该贪心算法在指定范围内无法得到最优解,并满足一系列优化条件。
01背包问题定义
给定 n 个物品,物品的重量为正整数 w1,w2,...,wn,价值为正整数 v1,v2,...,vn,背包容量为 W。要求选择物品(xi∈{0,1},1 表示选择第 i 个物品,0 表示不选择),满足:
i=1∑nwixi≤W
并最大化价值总和:
V=i=1∑nvixi
小W的贪心算法
- 将 n 个物品按 wivi(价值重量比)从大到小排序;若比值相同,则按重量 wi 从大到小排序。
- 初始化变量 V0=0(注:原文此处变量名疑似笔误,结合算法逻辑应为累计重量变量),从 1 到 n 枚举物品:若当前物品重量与 V0 之和不超过 W,则选择该物品(xi=1),并更新 V0=V0+wi;否则不选择(xi=0)。
- 枚举结束后,得到选择结果及对应的价值 V。
构造要求
需构造一组 w1,...,wn 和 v1,...,vn,满足以下条件(优先级从高到低):
- 对于任意 2≤W≤Wlim(Wlim 为给定常数),小 W 的贪心算法均无法得到最优价值 V。
- 在满足条件 1 的前提下,物品数量 n 尽量小。
- 在满足条件 1、2 的前提下,物品最大重量 max(w1,...,wn) 尽量小。
- 在满足条件 1、2、3 的前提下,物品最大价值 max(v1,...,vn) 尽量小。
情况可能有多种,要求输出按照w~i~升序的结果
输入格式
一行包含一个整数 Wlim(2≤Wlim≤5×103),表示背包容量 W 的上界。
输出格式
- 第一行:整数 n(1≤n≤104),表示物品数量。
- 第二行:n 个整数 w1,...,wn(1≤wi≤Wlim),表示物品重量。
- 第三行:n 个整数 v1,...,vn(1≤vi≤109),表示物品价值。
样例
样例输入 1
2
样例输出 1
2
1 2
2 3
提示
说明:可以证明,在给定数据范围约束下,总能找到满足要求的解,输出按照w~i~升序的结果。