背包算法

 今天在社区帮人解答某个算法问题,其中有位朋友提出了背包问题的算法,特把他的方法贴在这里收藏一下:
  1. namespace Program
  2. {
  3.     public class Package
  4.     {
  5.         public double[] goods = new double[] { 1, 1.1, 2, 3, 4 };
  6.         /// <summary>
  7.         /// 用递归算出
  8.         /// </summary>
  9.         /// <param name="puts">目前放入背包的数</param>
  10.         /// <param name="unPuts">可放入背包的数</param>
  11.         /// <param name="sum">背包还剩的容量</param>
  12.         public void ShowComposes(List<double> puts,double[] unPuts, double sum)
  13.         {
  14.             //输出当前放入背包符合条件的所有数
  15.             bool exist = false;
  16.             foreach (double d in puts)
  17.             {
  18.                 System.Console.Write(d+ " ");
  19.                 exist = true;
  20.             }
  21.             if(exist)
  22.                 System.Console.WriteLine();
  23.             //在可放入背包的数字中,选择可放的数并放进背包
  24.             foreach (double d in unPuts)
  25.             {
  26.                 if (d < sum)
  27.                 {
  28.                     List<double> newPuts = puts.ToList<double>();
  29.                     newPuts.Add(d);
  30.                     ShowComposes(newPuts, goods, sum - d);
  31.                 }
  32.             }
  33.         }
  34.         static void Main(string[] args)
  35.         {
  36.             Package p = new Package();
  37.             p.ShowComposes(new List<double>(), p.goods, 6);
  38.         }
  39.     }
  40. }
原帖地址:http://topic.csdn.net/u/20080827/13/3fbba373-8882-4d22-a0f2-2188b0ba2ef6.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值