欢迎收看本篇博客,今天给大家带来了排列组合输出方案数。在此之前,博主写过动态规划的硬币问题,给五种硬币(一分,五分,十分,二十五分,五十分)且不限制数量,请你输出其全部组合方案数。
如果我们想要6分的话,其组成为1+1+1+1+1+1和5+1;那么如果咱们要输出其全部排列式方案数呢?
其实改动不算太大,无非是将其遍历顺序颠倒:
for(int j = 0;i <= V;j++)
{
for(int i = 0;i <= n;i++)
{
if(j >= w[i])
{
dp[j] += dp[j - w[i]];
}
}
}
下面的图片为组合打印结果:
下面的图片为排列打印结果:
大家可以通过这两张图片的打印结果分析:
组合打印的情况为一行一行遍历不断的刷新值;排列打印情况为不断刷新每个不同背包容量所能装的最大数。由于刷新的顺序不同,所递推的值也会发生改变,在这里要是想不明白可以根据上面代码多多尝试几组数据,打印其dp数组的每一层的值。
实在弄不明白,欢迎评论区留言,好了感谢收看,别忘了三连支持哈。