早教吧作业答案频道 -->其他-->
求排列组合算法,不同数值组合成一米的算法,需求是这样的,有100个不同的产品,每个产品有不同的宽度,如:15厘米,30厘米,35厘米,50厘米,100厘米等,现想让不同的产品进行组合,组合成长度1米的
题目详情
求排列组合算法,不同数值组合成一米的算法,
需求是这样的,有100个不同的产品,每个产品有不同的宽度,如:15厘米,30厘米,35厘米,50厘米,100厘米等,现想让不同的产品进行组合,组合成长度1米的多个产品组合,怎么计算出有多少种组合,每种组合是由哪几个产品组成的,或写出算法,不论是C、.NET、JAVA的都可以,
需求是这样的,有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米宽度的组合,不要的是没有凑齐的.
一直穷举下去,答案出来了.
用递归会比较容易实现和比较容易看明白.
对于这类背包问题,通常是穷举找组合.
设一个数组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.产品质量公司的上游客户多为国有大型企业,并且有着比较长的合作时间,产品的质量比较稳定. 2020-05-15 …
一些经济作物如油菜、柑橘等,在开花时节,常因遭遇连续降雨而造成减产.造成减产的主要原因是()A.植 2020-05-15 …
把下列句子组合成语序合理、语意连贯的一段话,最恰当的一项是()①笼统地说,文化是一种社会现象,是人 2020-05-16 …
(2012•长宁区一模)某化学兴趣小组对水蒸气通过灼热的木炭后,得到的混合气体的主要成分产生了兴趣 2020-06-09 …
关于植物生长素和生长素类似物的叙述,错误的是()A.生长素的产生部位和生长素作用部位可以不同B.同 2020-06-30 …
下列有关生长素的产生、运输和分布的叙述中,不正确的是()A.生长素在幼嫩的芽、叶和发育中的种子中合 2020-07-04 …
自然界的许多动物,在正常情况下都是依靠父方产生的雄性细胞(精子)与母方产生的雌性细胞(卵子)融合(受 2020-11-02 …
到1957年,595个大中型工程建成投产,工业总产值比1952年增长98.3%,五年合计钢产量165 2020-11-22 …
植物被野生型农杆菌感染后会产生瘤状结构(类似愈伤组织),主要原因是农杆菌的Ti质粒中含有生长素合成基 2020-12-26 …
到1957年,595个大中型工程建成投产,工业总产值比1952年增长128.6%,五年合计钢产量16 2021-01-06 …