假設我有一個具有權重w和值v的對象的集合,我想最大化所選對象的值的總和而不用其權重的總和超過最大W.直到現在,經典的揹包問題。通過動態編程解決具有多個約束的揹包(0,1)
現在假設每個對象都可以屬於類別A,B,C等等......現在我想讓我的解決方案中的對象尊重A,B,C等的確切數目。我要求我算法,否則返回最近的解決方案。
實施例:
Object 1 : w=4 v=16 Type A
Object 2 : w=3 v=15 Type A
Object 3 : w=2 v=5 Type A
Object 4 : w=1 v=2 Type A
Object 5 : w=1 v=4 Type B
Object 6 : w=2 v=4 Type B
Object 7 : w=2 v=3 Type B
Object 8 : w=4 v=9 Type B
Object 9 : w=3 v=9 Type B
Object 10: w=1 v=2 Type B
Object 11: w=1 v=4 Type B
Object 12: w=4 v=8 Type C
Object 13: w=8 v=19 Type C
Object 14: w=1 v=2 Type C
Object 15: w=3 v=5 Type C
Desired number of objects : A=2 B=5 C=2
Set of objects solution : A{1,2},B{5,6,7,9,11},C{13,15}
我的第一種方法是考慮multidimensionnal陣列,其中所述第一尺寸爲對象的數目,則第二最大W,而其它維度中的每個類別的所需要的期望的數字,並且在用動態規劃填充陣列之後,如果對象屬於某個類別,則權重爲1,否則爲0。它不起作用,因爲有時某些解決方案更適合用以下的對象。
我的第二種方法是找到一個類別中所需數量的對象的每個可能子集,並在常規動態算法中將它們用作實例之後。它有效,但似乎不雅。
任何想法?
你的A,B,C似乎是平等約束,也許你需要查找迭代DP。 – g24l