幸运门票(计算一定数量的幸运数字,具有指定的所有数字总和)

时间:2011-01-05 16:07:02

标签: algorithm dynamic-programming

以下是problem

  

您的号码为1≤N≤50。每张票都有2N位数字。如果前N个数字的总和等于其最后N个数字的总和,我们称这个票是幸运的。您还可以获得数字中所有数字的总和。您的任务是计算一定数量的幸运数字,具有指定的所有数字总和。

对于输入2 2输出为4(0101,0110,1001,1010)

你可以帮我解决这个问题吗?什么是最低复杂度?

2 个答案:

答案 0 :(得分:4)

如果需要的金额为s,那么每一半都必须加上s/2。现在,您需要找到f(n, s/2):有多少个n位数字的总和为s/2。知道f(n, s/2),您可以在一行中得到答案(尝试自己搞清楚)。

关于如何计算f(n, m):这是标准DP。你有像f(n, m) = f(n-1, m) + f(n-1, m-1) + f(n-1, m-2) + ... + f(n-1, m-9)这样的递归公式。在这里,0, 1, 2, .. 9是给定数字的最后一位数的所有可能选项。如果最后一个数字为k,则其余数字为(n-1) - 长数字,数字加总数为m - k

希望它有所帮助。

PS根据问题的限制,你需要某种长的算术来传递它。

答案 1 :(得分:0)

<!-- no 'android:' prefix -->    
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>