trang chủ / đề bài / knapfract

Ba Lô Phân Số

Đề bài

Mô tả

Cho N vật. Vật thứ i có khối lượng wi và giá trị vi. Bạn có một ba lô sức chứa W.

Khác với ba lô 0/1, ở đây bạn được cắt vật: có thể lấy một phần bất kỳ của một vật (ví dụ 0.3 của vật i), khi đó khối lượng và giá trị cũng giảm theo tỉ lệ. Hãy tìm tổng giá trị lớn nhất nhét vào ba lô.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên N và W.
  • N dòng tiếp theo, mỗi dòng chứa hai số nguyên wi và vi.

Dữ liệu ra

In ra tổng giá trị lớn nhất, với độ chính xác 10−4.

Ràng buộc

  • 1≤N≤105
  • 1≤W≤109
  • 1≤wi≤106
  • 1≤vi≤109

Ví dụ

Input Output Giải thích
3 50
10 60
20 100
30 120
240.000000 Lấy hết vật 1 và 2 (w=30,v=160), rồi lấy 2030 của vật 3 (thêm w=20,v=80). Tổng v=240.
4 10
2 10
3 5
5 15
7 7
30.000000 Tỷ số v/w: vật 1=5, vật 3=3, vật 4=1, vật 2=1.67. Lấy theo thứ tự giảm dần.

Ghi chú

Bài này khác biệt với ba lô 0/1 ở chỗ có thể lấy phân số — giải được bằng tham lam theo tỷ số vi/wi.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0