trang chủ / đề bài / gregboat

Qua sông

Đề bài

Mô tả

Có n người đang đứng ở bờ này của một con sông và muốn sang bờ bên kia. Phương tiện duy nhất là một chiếc thuyền chở được tổng khối lượng tối đa k kg. Khối lượng của mỗi người là đúng 50 kg hoặc đúng 100 kg.

Thuyền không tự di chuyển được, nên mỗi lượt đi (theo bất kỳ chiều nào) phải có ít nhất một người ngồi trên thuyền, và tổng khối lượng những người trên thuyền không được vượt quá k.

Hãy tìm số lượt đi thuyền ít nhất để đưa được toàn bộ n người sang bờ bên kia. Ngoài ra, hãy đếm số cách thực hiện việc chuyên chở bằng đúng số lượt tối thiểu đó. Những người được đánh số phân biệt với nhau; hai cách được coi là khác nhau nếu tồn tại một lượt đi mà tập người ngồi trên thuyền ở hai cách là khác nhau.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên n và k — số người và giới hạn khối lượng của thuyền.
  • Dòng thứ hai chứa n số nguyên w1,w2,…,wn — khối lượng của từng người.

Dữ liệu ra

  • Dòng đầu in số lượt đi thuyền ít nhất, hoặc −1 nếu không thể đưa tất cả mọi người sang bờ bên kia.
  • Dòng thứ hai in số cách chuyên chở bằng đúng số lượt tối thiểu, lấy phần dư khi chia cho 109+7. In 0 nếu không thể thực hiện được.

Ràng buộc

  • 1≤n≤50
  • 1≤k≤5000
  • wi∈{50,100}

Ví dụ

Input Output Giải thích
1 50
50
1
1
Chỉ có một người nặng 50 kg, tự chèo thuyền sang bờ bên kia trong 1 lượt. Chỉ có đúng 1 cách.
3 100
50 50 100
5
2
Kế hoạch tối ưu: chở hai người 50 kg sang; một người 50 kg chèo về; chở người 100 kg sang; một người 50 kg chèo về; chở hai người 50 kg sang. Tổng cộng 5 lượt. Ở lượt thứ hai có 2 lựa chọn người quay về, nên có 2 cách.
2 50
50 50
-1
0
Thuyền chỉ chở được một người mỗi lượt. Người nào sang bờ bên kia cũng phải tự chèo thuyền quay lại, nên không bao giờ đưa được cả hai người sang.

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