C# 分布算法

C# 分布算法,c#,algorithm,list,grouping,knapsack-problem,C#,Algorithm,List,Grouping,Knapsack Problem,我有一个班级项目列表: 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; } pub

我有一个班级项目列表:

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; }
}
容器具有属性大小的最大值。 我需要将列表中的每个对象分配给一个容器,注意以下规则:

  • 共享相同名称的列表项的对象必须放置在同一容器上。当然,在TotalSize>Max Container Size中不可能有多个名称相同的项目

  • 我必须创建尽可能少的容器数量


  • 非常感谢您的建议。

    按容器ID拆分项目,并使用背包算法解决单独的问题实例


    因此,如果您有比最大容器大小更多的同名物品,那么您应该将溢出的物品放入一个新容器中,或者根本不关心溢出?您标记正确:使用背包algorithm@AttilaBuj我不能有“溢出”。输入数据将阻止它。容器的最小可能数量?简单-创建一个容器大小为
    MyListItemList.Count
    的容器,并将所有内容放入其中。你的两个条件都满足了。我猜这并不是完全的问题,事实上,你会得到一组容器,它们的大小是固定的…@Mashton一个容器有一个最大的ContainerSize属性值,我一开始就没有容器。目标是创造它们。也许我误解了答案?然后为每个出现的ID创建一个容器。