如果我有四个大小相同的数组,我如何确定从每个数组中选择一个元素的方法数量,以使四个元素具有相同的和?
例如,有81种方法可以从每个和为4的数组中选择一个元素。
A. 1 1 1
B. 1 1 1
C. 1 1 1
D. 1 1 1
我不知道如何做到这一点,如果没有某种野蛮的强迫。
想法
- 从1数组中获取和
k
的方法数=k
在数组中的出现次数 - 从2个数组中获得和
k
的方式数=sum(count(k-x) for each element x in array 2)
,其中count(y)
是从第一个数组中获取和y
的方式数。如果将第1点的结果记忆起来,则可以在O(1)
中获得count(y)
- 从3个数组中获得和
k
的方式数=sum(count(k-x) for each element x in array 3)
,其中count(y)
是从前两个数组中获取和y
的方式数。同样,如果您将第2点的结果记忆起来,则可以在O(1)
中获得count(y)
您现在应该已经了解了这个概念;从n
阵列获得和k
的方式的数目=sum(count(k-x) for each element x in the nth array)
,其中count(y)
是从第一个n-1
阵列获得和的y
的方式的数量。
动态编程
您需要构建一个记忆表,它基本上告诉您从第一个y
数组中获取和x
的方法的数量。如果您有第一个n-1
数组的此表,则可以有效地计算包括n-th
数组在内的所有和,并更新该表。