<分区>
Possible Duplicate:
Finding all possible combinations of numbers to reach a given sum
问题
您有一个人员列表作为输入,每个人都有一定数量的学分。您将获得必须通过使用一个或多个人的学分来实现的总数。该函数应输出将导致总数的所有存在的组合。
例如见下:-
static void Main(string[] args)
{
int total = Convert.ToInt32(args[0]);
var persons = new List<Person>();
persons.Add(new Person { Credits = 10, Name="Steve"});
persons.Add(new Person { Credits = 5, Name = "Paul" });
persons.Add(new Person { Credits = 4, Name = "David" });
persons.Add(new Person { Credits = 1, Name = "Kenneth" });
PrintAllCombinations(persons, total); // The function in question
}
public class Person
{
public string Name { get; set; }
public int Credits { get; set; }
}
在上面的示例中,给定总数 10,PrintAllCombinations 函数应输出类似于:-
- 组合 1) Steve:10
- 组合 2) Paul:5,David 4,Kenneth 1
- 组合 3)史蒂夫:9,保罗 1
- 组合 4) 史蒂夫:5,保罗 5
- ...等等
更新:我忘了说,你可以使用一个人信用的任何部分
我使用的示例是简化的,但实际场景将限制为不超过 100 人,并且总人数将始终少于 90。
什么是最好的解决方案?