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