Im học lập trình năng động và đang tìm cách để giải quyết vấn đề sau đây, có thể được tìm thấy ở đây http://www.cs.berkeley.edu/~vazirani/algorithms/chap6.pdf:động Lập trình và Ứng dụng Knapsack
Bạn đang đưa ra một mảnh hình chữ nhật của vải với kích thước X của Y, trong đó X và Y là các số nguyên dương và danh sách các sản phẩm n có thể được thực hiện bằng cách sử dụng vải. Đối với mỗi sản phẩm i trong [1, n] bạn biết rằng một hình chữ nhật có kích thước bằng bi là cần thiết và giá bán cuối cùng của sản phẩm là ci. Giả sử rằng ai, bi và ci là tất cả các số nguyên dương. Bạn có một chiếc máy có thể cắt bất kỳ miếng vải hình chữ nhật nào thành hai mảnh theo chiều ngang hoặc chiều dọc. Thiết kế một thuật toán tìm ra chiến lược tốt nhất để cắt miếng vải X của Y để các sản phẩm được tạo ra từ các mảnh kết quả tạo ra tổng giá bán tối đa. Bạn được tự do tạo ra nhiều bản sao của một sản phẩm nhất định như bạn muốn, hoặc không có sản phẩm nào nếu muốn. (Từ các thuật toán của Dasgupta, Papadimitriou, và Vazirani.)
Có vẻ như chúng ta có vấn đề về ba lô hai chiều, nhưng tôi nghĩ có thể giải quyết nó bằng thuật toán ba lô truyền thống bằng cách xem xét trọng lượng như các khu vực của hình chữ nhật. Điều này có vẻ giống như một cách tiếp cận hợp lý?
Đây là một bài tập lập trình cho một khóa học tôi đang dùng vì vậy xin vui lòng chỉ bao gồm thảo luận khái niệm và/hoặc mã giả để minh họa ý tưởng.
gì về một chiếc ba lô nhưng với mỗi vùng sản phẩm thay vì kích thước sản phẩm? – higuaro
Điều này có mùi giống như một biến thể khó khăn hơn của vấn đề cắt cổ phiếu, ngay cả trong giới hạn lập trình hạn chế, là tâm trí khó khăn để giải quyết. Hãy để tôi có một suy nghĩ về điều này, vì chương là tất cả về lập trình năng động đó là một cái gì đó của một gợi ý! – Rafe