今天在社区帮人解答某个算法问题,其中有位朋友提出了背包问题的算法,特把他的方法贴在这里收藏一下:
原帖地址:http://topic.csdn.net/u/20080827/13/3fbba373-8882-4d22-a0f2-2188b0ba2ef6.html
- namespaceProgram
- {
- publicclassPackage
- {
- publicdouble[]goods=newdouble[]{1,1.1,2,3,4};
- ///<summary>
- ///用递归算出
- ///</summary>
- ///<paramname="puts">目前放入背包的数</param>
- ///<paramname="unPuts">可放入背包的数</param>
- ///<paramname="sum">背包还剩的容量</param>
- publicvoidShowComposes(List<double>puts,double[]unPuts,doublesum)
- {
- //输出当前放入背包符合条件的所有数
- boolexist=false;
- foreach(doubledinputs)
- {
- System.Console.Write(d+"");
- exist=true;
- }
- if(exist)
- System.Console.WriteLine();
- //在可放入背包的数字中,选择可放的数并放进背包
- foreach(doubledinunPuts)
- {
- if(d<sum)
- {
- List<double>newPuts=puts.ToList<double>();
- newPuts.Add(d);
- ShowComposes(newPuts,goods,sum-d);
- }
- }
- }
- staticvoidMain(string[]args)
- {
- Packagep=newPackage();
- p.ShowComposes(newList<double>(),p.goods,6);
- }
- }
- }