考虑一条传送带,上面装载了许多物品。当物品从传送带上脱落时,它们会被装载到送货卡车上。所有卡车都是相同的,它们可以搬运的物品的重量不得超过特定最大重量(称为卡车的容量)。项目从1开始编号,并且具有不同的权重。
必须先将这些物品依次装载到卡车上,例如,第1到N个物品(对于某些N)在第一辆卡车上,而N + 1,…,M(对于一些M)在第二辆卡车上,依此类推。当然,并非所有卡车都将满负荷装载,但是可以保证没有任何一件物品对卡车来说太重。
我们可以用贪婪的方式装载卡车(在这辆卡车上装载尽可能多的物品,当下一个物品不适合时,启动新卡车),但这可能导致卡车之间的物品分配不平衡。

将车队的备用容量定义为车队中每辆卡车的未使用容量的平方和。我们希望以这种方式装载卡车,以最大程度地减少车队的备用能力。

给定卡车的容量c和物品的重量顺序,每辆卡车应携带多少物品,以及需要多少辆卡车?

数据的第一行给出c的值和项数n(

6  5
1  2  3
1  1


输出:在第一行上,打印所需的卡车数量。在第二行,打印每辆卡车上的物品数量,从第一辆卡车上的物品数量开始,然后是第二辆卡车上的物品数量,依此类推。在最后一行打印车队的备用容量。对于以上数据,您应该输出:

2
2  3
10


任何有关如何解决此问题的想法将不胜感激。

最佳答案

很好,无论您的讲师或辅导员是谁,他们都会有幽默感,他们给您解决了一个非常棘手的问题,实际上,NP-complete完全可以解决。如果我没有记错的话,这是Knapsac Problem的一个实例。阅读维基百科页面和有关它的大量研究;有很多算法可供您查看和实施,这些算法可以根据您的确切问题空间进行定制。

10-05 18:25