嗨,请让我知道我的关系有什么问题。
我的逻辑是:
分配第一个的方法的数目 element=k
还有很多方法 next (n-1)
元素是不同的 (k-1)*f(n-2)
以及分配两个相同元素的方法: k + (k-1)*f(n-1)
因此关系: no. of ways = ∑(k + (k-1)*f(n-1) + k + (k-1)*f(n-1))
我可以看到一些错误,如包含重复,但我无法找出关系。
您还可以找到以下代码:
def count_num_ways(n, k):
dp = [0 for i in range(n+1)]
dp[0] = 0
dp[1] = k
for i in range(2, n+1):
dp[i] = sum(
[
k+( k-1 )*dp[n-2],
k+(k-1)*dp[n-1]-k
]
)
print(dp)
谢谢。
1条答案
按热度按时间gupuwyp21#
让
f(n)
等于在最后两个字符相同的情况下形成n个元素的方法数,并让g(n)
等于在最后两个字符不同的情况下形成n个元素的方法数。作为
f(n)
,因为最后两个字符是相同的,所以我们需要选择一个不同的字符(k-1)
最后两个字符将是不同的g(n-1)
,结果是:作为
g(n)
,由于最后两个字符不同,我们可以选择相同的字符或不同的字符。对于第一种情况,相同的字符是唯一的选择:1
,最后两个字符相同:f(n-1)
. 对于第二种情况,不同的字符选项:(k-1)
以及不同的功能:g(n-1)
,结果是:对于第一个元素,我们选择一个字符
k
,答案是附言:
你可以代替
f(n-1)
在第二个等式中,但我认为这更直观。