trang chủ / bài tập / knaphalf

Ba lô một nửa

Đề bài

Mô tả

Bạn có một chiếc ba lô sức chứa Wn món đồ, món thứ i có khối lượng wi.

Hãy chọn một tập con các món đồ bỏ vào ba lô sao cho tổng khối lượng C của chúng ít nhất bằng một nửa sức chứa nhưng không vượt quá sức chứa. Cụ thể, C phải thỏa mãn:

W2CW.

Hãy in ra danh sách các món đồ được chọn, hoặc xác định rằng không tồn tại cách chọn nào thỏa mãn.

Nếu có nhiều tập con hợp lệ, in ra bất kỳ tập con nào. Bạn không cần tối đa hóa tổng khối lượng.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t — số lượng bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng thứ nhất chứa hai số nguyên nW.
    • Dòng thứ hai chứa n số nguyên w1,w2,,wn.

Dữ liệu ra

Với mỗi bộ dữ liệu:

  • Nếu không có cách chọn, in ra một số nguyên 1.
  • Ngược lại, in ra trên dòng thứ nhất số lượng món đồ được chọn m, dòng thứ hai in m chỉ số phân biệt j1,j2,,jm (1jin) — chỉ số các món đồ được bỏ vào ba lô.

Ràng buộc

  • 1t104
  • 1n2·105
  • 1W1018
  • 1wi109
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 2·105.

Ví dụ

Input Output Giải thích
3
1 3
3
6 2
19 8 19 69 9 4
7 12
1 1 1 17 1 1 1
1
1
-1
6
1 2 3 5 6 7
Bộ 1: lấy món khối lượng 3, lấp đầy ba lô vừa khít (3/2=233). Bộ 2: mọi món đều lớn hơn sức chứa W=2 nên không thể, in 1. Bộ 3: chọn 6 món khối lượng 1, tổng 6=12/2.
2
1 10
4
1 1000000000000000000
1000000000000000000
-1
1
1
Bộ 1: món duy nhất có khối lượng 4<10/2=5 nên không đạt được nửa sức chứa, in 1. Bộ 2: món có khối lượng đúng bằng W, thỏa mãn ngay.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0