求排列组合算法,不同数值组合成一米的算法,高手请进

需求是这样的,有100个不同的产品,每个产品有不同的宽度,如:15厘米,30厘米,35厘米,50厘米,100厘米等,现想让不同的产品进行组合,组合成长度1米的多个产品组合,怎么计算出有多少种组合,每种组合是由哪几个产品组成的,有没有大神能指点一下,或写出算法,不论是C、.NET、JAVA的都可以,谢谢了。

典型不可分割无限取且须放满背包问题

对于这类背包问题,通常是穷举找组合。

设一个数组num[6],num[1]至num[5]分别是100、50、35、30、15的个数(大的排在前边),即num[1]=1时,100厘米的产品只要1个。另外为了程序运行方便,也会相应设另外一个数组value[6],分别是各个产品的厘米数,即value[1]=100。
设了数组,然后就是穷举,具体方法是:先让value[1]的产品取满,即计算出num[1]=10,其他num[2]至num[5]都是0个;因此得出第一个组合,10,0,0,0,0。

得到第一个组合后,就减少一个value[1],将多出来的厘米数,用value[2]来填满,即得出第二个组合,9,2,0,0,0。

得出第二个组合后,第三个组合,需要减少一个value[2](为什么不是减少一个vlaue[1],因为为了统计方便和程序运行方便,也方便人看出思路,组合的第一个数需要保持9不变,直至第一个数为9的组合全找出来,再找第一个数为8的组合),相应地使用value[3]来填满。
但发觉增加一个value[3]之后,还未满,再增加一个value[3],却又超过了1米的限制。
那么就去找,增加一个value[4],但又发觉,增加一个value[4]后,也会超过限制。
所以最后增加一个value[5],于是第三个组合出来了,9,1,1,0,1。

9,1,1,0,1,接下来就是减少一个value[5]腾出空间,但发现已经没有更小的产品了,那么就在减少一个value[5]后,再减少一个value[3],腾出空间
现在腾出的空间有50,刚才已经减了value[3],那就去增加一个value[4];增加后发现未满,增加一个value[5];发现还没满,减一个value[5],再减一个value[4],接着再减一个value[2],增加一个value[3],继续寻求。。。

文字表达可能比较繁琐,用列举组合的方法可能比较直观。
10,0,0,0,0 要
9,2,0,0,0 要
9,1,1,0,1 要
9,1,0,1,1 不要
9,0,2,1,0 要
9,0,2,0,2 要
9,0,1,2,0 不要
9,0,1,1,2 不要
9,0,1,0,4 不要
9,0,0,3,0 不要
9,0,0,2,2 不要
9,0,0,1,4 不要
9,0,0,0,6 不要
8,4,0,0,0 要
。。。。。。

要的,都是可以刚好凑齐1米宽度的组合,不要的是没有凑齐的。
一直穷举下去,答案出来了。
用递归会比较容易实现和比较容易看明白。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-28
动态规划。追问

能说得具体些吗?

追答

动态规划有点绕, 很难在这里表述清楚。 如果你想弄明白原理 可以看一下背包九讲。
如果只是想要实现的代码 ,我可以写给你。

追问

好啊好啊,给我写段代码吧,看得明白些,谢谢大神了。

大学 排列组合(难,高手请进)
如果用计算器算近似结果就更容易了。排列组合的公式是C(N,m)=N!\/[m!*(N-m)!],所以答案是1000!\/(500!*500!)。用电脑上的计算器,选择“科学型”,采用阶乘(n!)运算,可以得到近似答案2.7028824094543656951561469362598e+299。

高中数学排列组合问题,高手请进~~~
∵(1)中:4个空位是四个相同元素,不用排顺序,∴用组合表示 (2)中:把3个空位捆绑在一起,看作是一个元素,而另一个元 素就是一个空位,“三个”与“一个”是两个不同元素,因此必须用排列来解决

有关排列组合的问题,高手请进!
答案是:C12(3)-C8(3)-C4(3)=160

高中数学排列组合问题,高手请进~~~
用组合来解 先从12个位置选3个放1 再从剩余的9个位置中选4个放2 其余的位置放3 一共有(C12 3)*(C9 4)种不同的十二位数

高中数学排列组合问题,高手请进~~~
设x1,x2,x3,x4是4个箱子放的球的个数x1+x2+x3+x4=7第一问求的是所有正整数解个数第二问求的是所有非负整数解个数根据插空法第一问答案为C(6,3)第二问答案为C(10,3)好像答案就是这样的如果你不懂怎么解的可以再问我

数学高手请进,一道排列组合题:数1,2,3,……,n的一个排列,如果没有任何...
排除法 A(n,n)-C(n,1)A(n-1,n-1)+C(n,2)A(n-2,n-2)-C(n,3)A(n-3,n-3)+……+ (-1)^n·A(0,0)=n![1-1\/1!+1\/2!-1\/3!+……+(-1)^n\/n!]

关于数学的排列组合问题(高手请进)~~~
第i行首项为(101-i,50+i)第i行末项为(101-i,100-i),第i行共有100-i-(50+i)+1=51-2i个元素,第i行第j列纵坐标取值范围为[50+i=<50+j<=100-i]选取N个数为不同行不同列的N个点集A(i,j)(in代表第n次取数所在的行,jm代表在n次所取的数在第n行第m列 第一次取行数有i...

高手请进,4种颜色卡片,每种3张,排成一排有几种排法
假如有三张颜色是相同的,那么就应该是12!\/3!种方法。但是现在有4组,每组3张颜色都相同,因此应该用12!先后四次除以3!,结果是 12!\/(3!*3!*3!*3!)=369600种排列方法。这是排列组合的可重复性排列问题,高中当然不会告诉你这种问题,但会考到。经过这个问题,希望你能掌握这种方法。

数学排列组合问题,高手请进
用间接法 先把绝对值差为1的种数出来,这个好办 在用总数减去,4个元素的子集有C4.20种,绝对值差为的4元素子集有16个,亲,你给个标准答案啊……

概率问题,涉及排列组合,高手请进
有五堆球,每堆五个分别有五种颜色,五个人每人一堆,从其中随机摸出一个,每个人的摸出任一颜色的概率为1\/C(5,1)=1\/5 你说的任一情况的概率为(1\/5)^5

相似回答