Giả sử ta có hai mảng chứa số nguyên. Một mảng chứa chiều cao các hộp độ rộng đơn vị, mảng kia chứa chiều cao các phòng trong kho. Các phòng được đánh số 0...n, và chiều cao các phòng được cung cấp tại các chỉ mục tương ứng trong mảng godown. Ta phải tìm số hộp có thể đẩy vào kho. Các điều kiện:
- Các hộp không thể xếp chồng lên nhau.
- Thứ tự các hộp có thể thay đổi.
- Các hộp được đưa vào kho chỉ từ trái sang phải.
Nếu một hộp cao hơn chiều cao phòng, thì hộp đó cùng với tất cả hộp bên phải nó không thể đẩy vào kho.
Ví dụ: boxes = [4,5,6], godown = [4, 5, 6, 7], kết quả là 1 - chỉ có một hộp có thể chèn được. Phòng đầu tiên có kích thước 4 và các hộp còn lại không thể đẩy vào vì phải đi qua phòng đầu tiên mà chiều dài nhỏ hơn các hộp khác.
Giải thuật
- Sắp xếp danh sách
boxes curmin := [godown[0]]cm := curmin[0]- For
itừ 1 đếnsize of godown:cur := godown[i]- Nếu
cur < cm:cm := cur - Thêm
cmvào cuốicurmin
i := 0,j := size of godown - 1,r := 0- While
j >= 0vài < size of boxes:- Nếu
curmin[j] >= boxes[i]:i++,r++ j--
- Nếu
- Trả về
r
Ví dụ (Python)
def solve(boxes, godown):
boxes.sort()
curmin = [godown[0]]
cm = curmin[0]
for i in range(1, len(godown)):
cur = godown[i]
if cur < cm:
cm = cur
curmin.append(cm)
i, j = 0, len(godown) - 1
r = 0
while j >= 0 and i < len(boxes):
if curmin[j] >= boxes[i]:
i += 1
r += 1
j -= 1
return r
print(solve([4,5,6], [4, 5, 6, 7]))
Input
[4,5,6], [4, 5, 6, 7]
Output
1