我得到9个数字,我想分成两个列表,两个列表总结时需要达到一定数量 . 例如,我得到了 int
的列表:
List<int> test = new List<int>
{
1963000, 1963000, 393000, 86000,
393000, 393000, 176000, 420000,
3193000
};
我希望有两个数字列表,当你总结它们时,它们都达到了400多万 .
如果2个列表没有相同数量的数字,则无关紧要 . 如果只需要2个数字就可以在1个列表中达到4百万,而7个数字一起达到700万,那很好 .
只要两个列表总结等于400万或更高 .
1 回答
这个特定的金额是否足够低,容易达到?如果是,那么您的算法可能很简单:迭代i从1到项目数 . 总结第一个i数字 . 如果总和高于你的某个总和(例如4百万),那么你就完成了,否则增加i .
但是:如果您的某些总和很高并且找到分区并不是那么简单,那么您就拥有着名的Partition Probem(https://en.wikipedia.org/wiki/Partition_problem),这不是那么简单,但有一些算法 . 阅读此维基百科artikle或尝试谷歌"Partition problem solution"或类似 .