这题还是看了官方的解题报告才明白怎么做的,动态规划加记忆化搜索。
dp[n][k]代表n个人中有k个人都拿错信件的状态数目,
当n=k=0时:dp[n][k]=1
n=0时:dp[n][k]=0
k=0时:dp[n][k]=n*dp[n-1][k]
否则:dp[n][k]=(n-k)*(dp[n-2][k-1]+dp[n-1][k])+(k-1)*(dp[n-2][k-2]+dp[n-1][k-1])
注意:当k=1时,没有后半部分
本文介绍了一种利用动态规划与记忆化搜索解决特定信件错配问题的方法。通过定义状态dp[n][k]表示n个人中有k个人拿错信件的状态数目,并给出了递推公式。该方法适用于计算在一定人数内至少有k人拿错信件的情况数。
这题还是看了官方的解题报告才明白怎么做的,动态规划加记忆化搜索。
dp[n][k]代表n个人中有k个人都拿错信件的状态数目,
当n=k=0时:dp[n][k]=1
n=0时:dp[n][k]=0
k=0时:dp[n][k]=n*dp[n-1][k]
否则:dp[n][k]=(n-k)*(dp[n-2][k-1]+dp[n-1][k])+(k-1)*(dp[n-2][k-2]+dp[n-1][k-1])
注意:当k=1时,没有后半部分
686

被折叠的 条评论
为什么被折叠?