用c语言解决问题有一些A盒子和B盒子数量足够多。要求把nn≤30个盒子方成一行但至少有3个A盒子放在一起问有多少种方法?
思路:
本题可以用动态规划来解决,设f[i][j]表示前i个盒子中,最后j个是A盒子的方案数。则有以下转移方程:
1.当第i个盒子是B盒子时,f[i][0] = f[i-1][1] + f[i-1][0]
2.当第i个盒子是A盒子时,设k为前面连续的A盒子数量,则有:
①当k≥3时,f[i][k] = f[i-1][k-1] + f[i-1][k-2] + … + f[i-1][0]
②当k<3时,f[i][k] = f[i-1][k-1] + f[i-1][0]
3.f[i][j]的总方案数为f[n][j]的累加和,即:ans = f[n][0] + f[n][1] + … + f[n][n]
代码实现如下:
原文地址: https://www.cveoy.top/t/topic/bmIk 著作权归作者所有。请勿转载和采集!