我遇到了问题,
x1 + x2 + x3 +x4 +x5 + x6 < M
其中xi是正整数,M可以是[1,6000000]中的任何值。
有多少unordered solutions with distinct xi's
存在。
我想知道这是否可以通过动态编程来完成(它在给定的约束和内存限制下快速运行),或者我必须提出一个组合式公式。
我必须报告answer modulo 1000000007
PS:我不想要解决方案
答案 0 :(得分:2)
你不想要完整的解决方案,所以我不会把它给你;我会试着指出你正确的方向。
首先,您需要在更简单的问题中分解问题。在你的情况下,这就是诀窍:
|(x_1,...x6) : sum(x_i) < M | = sum( |(x_1,...,x6) : sum(x_i) = N|)
代表N=6,...,M-1
。现在,您只需要不同的解决方案,因此您可以假设:
x_1 <= x_2 <= ... <= x_6
现在,计算一下k
个元素总和为N
的方式的数量并不难(首先尝试使用2个元素,而不是3个元素,然后尝试获取一般论坛,并且,如果你有一些时间在你的手上,通过归纳证明它,并且一旦你有了,你基本上完成了。
重要提示:因为现在应该很清楚,我认为组合方法比蛮力方法更好
答案 1 :(得分:0)
你可以去蛮力,只需创建一个矢量(或其他动态容器)来推送解决方案。这不会是内存问题。 但这将是漫长的过程。 另一个想法是创建一个fstream,并定期刷新(每10000个解决方案);