从列表中查找某组数字

时间:2014-04-13 17:34:47

标签: algorithm list set

我正在处理这个用户输入数字列表的项目。我把这些数字放在一个数组中。我需要找到一组给定长度的数字,其总和可以被5整除。

例如,如果列表是9768014,并且所需的长度是6,那么输出将是987641.

我需要什么算法才能找到这组数字?

1 个答案:

答案 0 :(得分:1)

您可以通过动态编程解决此问题。设f(n,m,k)是索引子集{1,2,...,n}中数字的1和n之间的最大索引,它给出了使用m个数的k mod 5之和。 (有可能f(n,m,k)=无)。如果你知道所有N <= n + 1和M&lt的f(N,M,k)的值,你可以计算f(n + 1,m,k)和f(n,m + 1,k) ; m和所有N&lt; = n和M&lt; m + 1并且N = n,M = m,并且所有k = 0,1,2,3,4。如果你发现f(n,m,0)有一个解决方案,其中m是你想要使用的数字,那么你就完成了。此外,您不必为任何大于所需数字的M计算f(N,M,k)。总复杂度为O(n * m),其中n是数字的总数,m是您尝试达到的子集的大小。