Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
, C++, Python

UNBOUNDED KNAPSACK – Cái túi (mỗi gói được chọn nhiều lần)

Trong siêu thị có n gói hàng (n ≤ 100). Gói hàng thứ i có:

  • Trọng lượng W[i] (1 ≤ W[i] ≤ 100)
  • Giá trị V[i] (1 ≤ V[i] ≤ 100)

Một tên trộm mang theo cái túi có thể mang tối đa trọng lượng M (M ≤ 100).

Khác với bài cái túi 0/1: mỗi gói hàng có thể được chọn nhiều lần (chọn 0, 1, 2, ... lần).

Hãy xác định cách chọn các gói hàng sao cho:

  • Tổng trọng lượng không vượt quá M
  • Tổng giá trị là lớn nhất

Input

  • Dòng 1: hai số nguyên nM
  • n dòng tiếp theo: mỗi dòng ghi W[i]V[i]

Output

  • Dòng 1: giá trị lớn nhất có thể đạt được
  • Dòng 2: chỉ số các gói hàng đã chọn, mỗi chỉ số có thể xuất hiện nhiều lần (nếu lấy nhiều gói cùng loại).
    Nếu không lấy gói nào, dòng 2 để trống.

Ví dụ

Input

3 10
6 30
3 14
4 16

Output (một đáp án hợp lệ)

46
1 3

Input

2 10
3 5
4 6

Output (một đáp án hợp lệ)

16
1 1 2

(Chọn gói 1 và gói 3: tổng trọng lượng 10, tổng giá trị 46. Có thể tồn tại nhiều đáp án tối ưu khác.)


Bình luận

Hãy đọc nội quy trước khi bình luận.


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