2014-01-13 48 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创建一个容器。 –