问题描述
问题如下:已经result=10,数组A={1,2,3,4,5,6,7,8,9,10},希望能在数组中找出SUM()=10的所有元素。比如:1,9;2,8;10;等等现在我想到的办法是循环组合的方式:从C(1,10)到C(2,10)直到C(10,10),请问有没有更有效率的办法?在线等,万分感谢!!!
解决方案
解决方案二:
01背包
解决方案三:
坐等Linq高人
解决方案四:
该回复于2012-03-16 13:04:51被版主删除
解决方案五:
我也只能想到循环的方式……等高人
解决方案六:
引用2楼nonocast的回复:
坐等Linq高人
同等LINQ高手
解决方案七:
在线等高人
解决方案八:
引用1楼faoyy的回复:
01背包
+1标准的背包
解决方案九:
基本算法啊,背包引用7楼hwbox的回复:
引用1楼faoyy的回复:01背包+1标准的背包
解决方案十:
各位高手有没有背包的算法,不要递归那种的;背包问题,其基本思想是不是仍然是循环?
解决方案十一:
求高手回复
解决方案十二:
staticvoidMain(string[]args){int[]values={1,2,3,4,5,6,7,8,9,10};vartestdata=values.Select((n,i)=>new{id=i+1,total=n}).ToArray();vartotal=10;Func<IEnumerable<int[]>,int[],IEnumerable<int[]>>comb=(x,y)=>fromainxfrombinywherea.Count()==0||a.Last()<bselecta.Concat(new[]{b}).ToArray();varindices=Enumerable.Range(0,testdata.Length).ToArray();varlist=newint[][]{newint[]{}}.AsEnumerable();varresult=Enumerable.Range(1,testdata.Length).SelectMany(i=>list=comb(list,indices)).Where(c=>c.Sum(i=>testdata[i].total)==total).Select(c=>c.Select(i=>testdata[i]));foreach(varcinresult)Console.WriteLine("({0})t{1}={2}",string.Join(",",c.Select(d=>d.id)),string.Join("+",c.Select(d=>d.total)),total);}
解决方案十三:
问题已用其他方法解决,感谢各位的回复