2014-01-13 66 views
-1

我有類項目的列表:分配算法

public class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int ItemSize { get; set; } 
    public int? ContainerId { get; set; } 
} 

,也是一個類容器

public class Container 
{ 
    public int Id { get; set; } 
    public int ContainerSize { get; set; } 
} 

的容器有一個最大價值的財產尺寸。 我需要列表中的每個對象分配到容器中,照顧這些規則:共享相同的名稱列表項的

  1. 對象必須被放置在同一個容器中。當然,不可能有一些與TotalSize> Max Container Size同名的Item。

  2. 我要創建容器

的少不可能性號任何意見是極大的讚賞。

+1

所以,如果你有比最大容器大小相同的名字更多的項目,那麼你應該把溢出的物品放入一個新的容器或只是不關心溢出? –

+2

你標記的是正確的:使用揹包算法 –

+0

@AttilaBujáki我不能有「溢出」。輸入數據將阻止它。 –

回答

1

按容器ID拆分項目,並使用揹包算法來解決單獨的問題實例。

http://en.wikipedia.org/wiki/Knapsack_problem

+0

我在開始時沒有容器。目標是創造它們。也許我誤解了答案? –

+0

然後爲每個發生的ID創建一個容器。 –