Ba lô một nửa
Đề bài
Mô tả
Bạn có một chiếc ba lô sức chứa và món đồ, món thứ có khối lượng .
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ủ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ể, phải thỏa mãn:
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 — 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 và .
- Dòng thứ hai chứa số nguyên .
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 .
- Ngược lại, in ra trên dòng thứ nhất số lượng món đồ được chọn , dòng thứ hai in chỉ số phân biệt () — chỉ số các món đồ được bỏ vào ba lô.
Ràng buộc
- Tổng trên tất cả các bộ dữ liệu không vượt quá .
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 , lấp đầy ba lô vừa khít (). Bộ 2: mọi món đều lớn hơn sức chứa nên không thể, in . Bộ 3: chọn 6 món khối lượng , tổng . |
| 2 1 10 4 1 1000000000000000000 1000000000000000000 |
-1 1 1 |
Bộ 1: món duy nhất có khối lượng nên không đạt được nửa sức chứa, in . Bộ 2: món có khối lượng đúng bằng , thỏa mãn ngay. |
Bình luận