Sql2005 怎么实现类似装箱算法
Sql2005 如何实现类似装箱算法?
有同一种物品,装入不同的3个箱子(不必考虑体积),箱子容量固定为 6、10、20件。
怎么实现传入一个数量,得到箱数最少,箱子最满的结果呢?
如果能设置优先级更佳,即优先箱数最少,再考虑最满,或者优先箱子最满,再考虑箱数最少。
这个如何实现?大家帮忙看看,谢谢啦!
例如:传入17,应该得到20件的1箱。
传入15,应该得到10件的1箱,6件的1箱。
------解决方案--------------------
晕 这个用程序去做更加合适。
------解决方案--------------------
好像以前用递归做过一个.
------解决方案--------------------
呵呵.不是,这是背包算法吧.
------解决方案--------------------
------解决方案--------------------
我感觉三层循环可以搞定
------解决方案--------------------
有同一种物品,装入不同的3个箱子(不必考虑体积),箱子容量固定为 6、10、20件。
怎么实现传入一个数量,得到箱数最少,箱子最满的结果呢?
如果能设置优先级更佳,即优先箱数最少,再考虑最满,或者优先箱子最满,再考虑箱数最少。
这个如何实现?大家帮忙看看,谢谢啦!
例如:传入17,应该得到20件的1箱。
传入15,应该得到10件的1箱,6件的1箱。
------解决方案--------------------
晕 这个用程序去做更加合适。
------解决方案--------------------
好像以前用递归做过一个.
------解决方案--------------------
呵呵.不是,这是背包算法吧.
------解决方案--------------------
------解决方案--------------------
我感觉三层循环可以搞定
------解决方案--------------------
- SQL code
declare @value int declare @str varchar(100) set @value = 1 while @value<=20 begin ;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 cte order by SumValue-@value,NumSum print @str set @value = @value + 1 end /******************** 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箱
------解决方案--------------------
------解决方案--------------------