这只是子集和问题。 令dp[i] = true表示我们可以构建和为i,否则为false。 dp[0] = true s = 0 for each number x in the array: s += x for j = s down to x dp[j] = dp[j] OR dp[j - x] 然后找到最大的j <= s,使得j % k == 0且dp[j] == true。