Sql2005 如何实现类似装箱算法?
有同一种物品,装入不同的3个箱子(不必考虑体积),箱子容量固定为 6、10、20件。
怎么实现传入一个数量,得到箱数最少,箱子最满的结果呢?
如果能设置优先级更佳,即优先箱数最少,再考虑最满,或者优先箱子最满,再考虑箱数最少。
这个如何实现?大家帮忙看看,谢谢啦!
例如:传入17,应该得到20件的1箱。
传入15,应该得到10件的1箱,6件的1箱。
[解决办法]
晕 这个用程序去做更加合适。
[解决办法]
好像以前用递归做过一个.
[解决办法]
呵呵.不是,这是背包算法吧.
[解决办法]
declare @value intdeclare @str varchar(100)set @value = 1while @value<=20begin;with cte as( select @value as MakeValue,a.number as SixNum,b.number as TenNum,c.number as TwentyNum, a.number+b.number+c.number as NumSum,a.number*6+b.number*10+c.number*20 as SumValue from master..spt_values a,master..spt_values b,master..spt_values c where a.[type] = 'p' and b.[type] = 'p' and c.[type] = 'p' and a.number between 0 and 4 and b.number between 0 and 2 and c.number between 0 and 1 and a.number*6+b.number*10+c.number*20 >= @value and a.number*6-@value < 6 and b.number*10-@value < 10 and c.number*20-@value < 20)select top 1 @str = ltrim(@value)+'最优箱数排列是:'+'量级6的箱数有'+ltrim(SixNum)+'箱' +',量级为10的箱数有'+ltrim(TenNum)+'箱,量级为20的箱数有'+ltrim(TwentyNum)+'箱'from cteorder by SumValue-@value,NumSumprint @strset @value = @value + 1end/********************1最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有0箱,量级为20的箱数有0箱2最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有0箱,量级为20的箱数有0箱3最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有0箱,量级为20的箱数有0箱4最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有0箱,量级为20的箱数有0箱5最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有0箱,量级为20的箱数有0箱6最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有0箱,量级为20的箱数有0箱7最优箱数排列是:量级6的箱数有0箱,量级为10的箱数有1箱,量级为20的箱数有0箱8最优箱数排列是:量级6的箱数有0箱,量级为10的箱数有1箱,量级为20的箱数有0箱9最优箱数排列是:量级6的箱数有0箱,量级为10的箱数有1箱,量级为20的箱数有0箱10最优箱数排列是:量级6的箱数有0箱,量级为10的箱数有1箱,量级为20的箱数有0箱11最优箱数排列是:量级6的箱数有2箱,量级为10的箱数有0箱,量级为20的箱数有0箱12最优箱数排列是:量级6的箱数有2箱,量级为10的箱数有0箱,量级为20的箱数有0箱13最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有1箱,量级为20的箱数有0箱14最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有1箱,量级为20的箱数有0箱15最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有1箱,量级为20的箱数有0箱16最优箱数排列是:量级6的箱数有1箱,量级为10的箱数有1箱,量级为20的箱数有0箱17最优箱数排列是:量级6的箱数有3箱,量级为10的箱数有0箱,量级为20的箱数有0箱18最优箱数排列是:量级6的箱数有3箱,量级为10的箱数有0箱,量级为20的箱数有0箱19最优箱数排列是:量级6的箱数有0箱,量级为10的箱数有0箱,量级为20的箱数有1箱20最优箱数排列是:量级6的箱数有0箱,量级为10的箱数有0箱,量级为20的箱数有1箱
[解决办法]