问题描述
有队列A,里面有X个对象,每个对象的值为1-100不等。有队列B,里面有Y个对象,每个对象的值为1-100不等。两个队列中的对象个数是不确定的。需要从A队列中按序号取出一个或多个对象出来,其对象的数值总和与队列B中按序号优先级取一个或多个对象的值相等。匹配方式优先级:1、A队列中按序号大小优先顺序取一个对象能与B队列中也按序号大小优先级取对象匹配,这属于1对1匹配。最优先匹配的。2、A队列中所有单个对象值无法与B队列中的单个对象值匹配的情况下,再从A队列中按序号大小优先顺序取一个对象能与B队列中也按序号大小优先级取多个对象值匹配。这属于1对N匹配。3、第一种与第二种情况下都无法匹配上,从A队列按序号大小顺先顺序中取多个对象与B队列中的也按序号大小优先级取一个对象值匹配。这属于N对1匹配。4、第一种与第二种情况下都无法匹配上,从A队列按序号大小顺先顺序中取多个对象与B队列中也按序号大小优先级取多个对象值匹配。这属于N对象匹配。例:1对1匹配:A队列中的第1个对象值为5,与B队列中第3个对象匹配。1对N匹配:A队列中的第1个对象与B队列中第2个与第6个、第10个对象值之和匹配。N对1匹配:A队列中第2、5、10对象对B队列中第3个对象匹配。N对N匹配:A队列中第2、5、10对象对B队列中第3、4、6、7对象匹配。这种是什么算法问题,用C#如何实现?
解决方案
解决方案二:
用过的可否在用?
解决方案三:
比较n和t大小.假如n<t.拿A1-b1.a2-b2……an-bn计算差是否有为零的组,有则满足第一种匹配.
解决方案四:
理解错了.这个题目貌似没有什么特殊的算法,只能按条件一步一步运算
解决方案五:
头三种情况还好说一点,在程序上是可以实现的。第四种情况就比较麻烦,第四种情况下的N对N,有没有什么算法?
解决方案六:
步骤一:先从AB队列取首个数字,如果相等则满足条件1步骤二:如果不等,则从较小值所在队列取一个数字相加后再与之前的数字比较,如果相等则满足条件2或3步骤三:重复步骤二直到两边数字和相等,满足条件4
解决方案七:
设有:Combination可对队列做n中取m的组合Sum可对队列求和则(伪码)for(a=1;a<=队列A.Count;a++){foreach(AinCombination(队列A,a)){t=Sum(A);for(b=1;b<队列B.Count;b++){foreach(BinCombination(队列B,b)){if(t==Sum(B){}}}}}
解决方案八:
引用6楼xuzuning的回复:
设有:Combination可对队列做n中取m的组合Sum可对队列求和则(伪码)for(a=1;a<=队列A.Count;a++){foreach(AinCombination(队列A,a)){t=Sum(A);for(b=1;b<队列B.Count;b++){foreach(BinCombination(队列B,b)){if(t==Sum(B){}}}}}
谢谢!这个可以解决问题了!