Những gì bạn đang đề xuất về cơ bản là một biến thể của Vấn đề Knapsack , với sự thay đổi được thêm vào, do nén tệp, bạn không bắt đầu biết số tiền "ba lô" 20 MB của mình sẽ chiếm bao nhiêu.
Tất nhiên, giải pháp tầm thường sẽ chỉ đơn giản là nén từng tệp một cách độc lập, nhưng điều đó không làm giảm số lượng tệp bất kỳ, vì vậy tôi nghi ngờ nó sẽ không phải là một giải pháp thỏa đáng.
Nếu tôi gặp vấn đề này, tôi cho rằng tôi sẽ bắt đầu bằng cách nén từng tệp riêng lẻ vào một vị trí tạm thời (hoặc trong bộ nhớ, mà không ghi chúng vào đĩa), để tôi có thể có kích thước nén xấp xỉ cho mỗi tệp. Với thông tin đó, sau đó có thể quyết định các tệp nào sẽ được nhóm lại với nhau theo bất kỳ phương pháp tiếp cận tiêu chuẩn nào cho Vấn đề Knapsack và tạo các tệp zip thực tế.
Giả sử bạn có sẵn một ngôn ngữ kịch bản cho bạn và bạn biết cách sử dụng nó, tôi sẽ hy vọng cách tiếp cận này khá đơn giản để tự động hóa; thực hiện thủ công sẽ khá tẻ nhạt nếu bạn có nhiều hơn một số tệp để xử lý ...