有一些A盒子和B盒子数量足够多。要求把nn≤30个盒子方成一行但至少有3个A盒子放在一起问有多少种方法
可以使用动态规划来解决。令dp[i][0]表示前i个盒子中,没有连续的3个A盒子的方案数;dp[i][1]表示前i个盒子中,最后3个盒子是A盒子的方案数;dp[i][2]表示前i个盒子中,最后2个盒子是A盒子的方案数;dp[i][3]表示前i个盒子中,最后1个盒子是A盒子的方案数。
对于dp[i][0],可以在前i-1个盒子中任意放B盒子,所以有dp[i][0] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2] + dp[i-1][3]。
对于dp[i][1],前i-3个盒子必须没有连续的3个A盒子,所以有dp[i][1] = dp[i-3][0]。
对于dp[i][2],前i-2个盒子必须没有连续的3个A盒子,所以有dp[i][2] = dp[i-2][0]。
对于dp[i][3],前i-1个盒子必须没有连续的3个A盒子,所以有dp[i][3] = dp[i-1][0]。
最终的答案为dp[n][0] + dp[n][1] + dp[n][2] + dp[n][3]。
时间复杂度为O(n),可以通过本题。

原文地址: http://www.cveoy.top/t/topic/bmHV 著作权归作者所有。请勿转载和采集!