Xếp hộp

Đề bài

Mô tả

Cho n hình chữ nhật, mỗi hình có chiều cao bằng 1. Chiều rộng của mỗi hình chữ nhật là một lũy thừa của 2 (nghĩa là có thể biểu diễn dưới dạng 2x với x là số nguyên không âm).

Bạn được cho một hộp hai chiều có chiều rộng W. Lưu ý W không nhất thiết là lũy thừa của 2, nhưng đảm bảo W không nhỏ hơn chiều rộng của hình chữ nhật lớn nhất.

Hãy tìm chiều cao nhỏ nhất của hộp sao cho có thể xếp tất cả n hình chữ nhật vào trong. Cho phép để khoảng trống trong hộp sau khi xếp.

Không được phép xoay các hình chữ nhật. Hai hình chữ nhật khác nhau không được phép giao nhau (diện tích giao bằng 0).

Dữ liệu vào

  • Dòng đầu chứa một số nguyên t — số bộ dữ liệu.
  • Với mỗi bộ:
    • Dòng đầu chứa hai số nguyên nW.
    • Dòng thứ hai chứa n số nguyên w1,w2,,wn — chiều rộng của các hình chữ nhật. Mỗi wi là một lũy thừa của 2.

Dữ liệu ra

In ra t dòng, mỗi dòng là chiều cao nhỏ nhất của hộp tương ứng với mỗi bộ dữ liệu.

Ràng buộc

  • 1t5·103
  • 1n105
  • 1W109
  • 1wi106wi là lũy thừa của 2
  • maxiwiW
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 105

Ví dụ

Input Output Giải thích
2
5 16
1 2 8 4 8
6 10
2 8 8 2 2 8
2
3
Bộ 1: hộp rộng 16, có thể xếp {8,8} trên một hàng (tổng 16) và {4,2,1} trên một hàng (tổng 7), cần 2 hàng. Bộ 2: hộp rộng 10, xếp {8,2} trên mỗi hàng cần 3 hàng.
1
5 4
4 4 4 4 4
5 Mỗi hình rộng 4 chiếm trọn một hàng rộng 4, cần 5 hàng.

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 1.26.3 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