车队备用容量

时间:2011-02-22 11:40:02

标签: c

考虑装载许多物品的传送带。当物品从皮带上脱落时,它们被装载到运输卡车上。所有卡车都是相同的,他们可以携带物品达到特定的最大重量(称为卡车的容量)。物品从1开始编号,具有各种重量。 物品必须顺序装载到卡车上,即物品1到N(对于一些N)在第一辆卡车上行驶,物品N + 1,......,M(对于某些M)在第二辆卡车上行驶,依此类推。当然,并非所有卡车都能满载,但保证卡车上没有单件物品太重。 我们可以贪婪地装载卡车(在这辆卡车上装载尽可能多的物品,当下一个物品不合适时,启动一辆新卡车),但这可能导致卡车之间物品的分配不均衡。 / p>

将车队的备用容量定义为车队中每辆卡车未使用容量的平方和。我们希望以这样的方式装载卡车,以尽量减少车队的备用容量。

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

第一行数据给出c的值和项目数n(< = 1000)。后续行按顺序包含n个值,即项目的权重。一些样本数据是:

6  5
1  2  3 
1  1

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

2
2  3
10

如何解决这个问题的任何想法都将非常感激。

1 个答案:

答案 0 :(得分:0)

很高兴,无论你的讲师或导师是否有幽默感,他们都给你一个非常难以解决的问题,事实上它完全是NP完全解决的。如果我没有弄错的话,这是Knapsac Problem的一个实例。阅读维基百科页面和很多关于它的研究;有很多算法可供您查看和实施,可根据您的确切问题空间进行定制。