动态规划DP ---- 硬币问题(4) ---- 排列方案数

欢迎收看本篇博客,今天给大家带来了排列组合输出方案数。在此之前,博主写过动态规划的硬币问题,给五种硬币(一分,五分,十分,二十五分,五十分)且不限制数量,请你输出其全部组合方案数。

如果我们想要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 ---- 硬币问题(4) ---- 排列方案数_第1张图片

下面的图片为排列打印结果: 

动态规划DP ---- 硬币问题(4) ---- 排列方案数_第2张图片

大家可以通过这两张图片的打印结果分析:

组合打印的情况为一行一行遍历不断的刷新值;排列打印情况为不断刷新每个不同背包容量所能装的最大数。由于刷新的顺序不同,所递推的值也会发生改变,在这里要是想不明白可以根据上面代码多多尝试几组数据,打印其dp数组的每一层的值。

实在弄不明白,欢迎评论区留言,好了感谢收看,别忘了三连支持哈。 

你可能感兴趣的:(动态规划,算法)