【模板】01背包(方案输出)
题号:NC283292
时间限制:C/C++/Rust/Pascal 10秒,其他语言20秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}对于给定的 n 件物品和一个容量为 m 的背包,每件物品有体积 w_i 和价值 v_i 两种属性。你可以选取一些物品放入背包带走,求解在装入物品总体积不超过 m 的前提下,能带走的最大物品价值。输出任意一种选取方案。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10 \right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入两个整数 n,m\left( 1 \leqq n,m \leqq 10^4 \right) 代表物品数量、背包容量。
\hspace{15pt}此后 n 行,第 i 行输入两个整数 w_i,v_i \left( 0 \leqq w_i,v_i \leqq m \right) 代表第 i 件物品的体积、价值。

输出描述:

\hspace{15pt}对于每一组测试数据,请参考下方的格式输出。
\hspace{15pt}第一行输出一个整数 p \left( 1 \leqq p \leqq n \right) 代表选取物品数量。
\hspace{15pt}第二行输出 p 个不同的整数代表选取的物品编号。编号即输入顺序,从 1 开始计数。

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
1
5 10
3 2
3 2
4 3
2 1
5 6

输出

复制
3
2 4 5