背包算法
代码
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);
}
}
}
{
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);
}
}
}
这里是算小于6的全部组合.

浙公网安备 33010602011771号