【发布时间】:2016-07-14 19:26:59
【问题描述】:
关于将 N 个相同的球放入 M 个不同的箱子并打印所有组合的经典问题:如果您想通过打印所有案例来扩展问题0< M, N
蛮力方法可以这样做:
for (int i =0; i<M; i++)
{
for (int j =0; j <N; j++)
{
PrintAllCombinations(j,i)
}
}
现在,如果我们研究前一对 m 和 n 的输出,我们会发现前一次迭代的输出是下一次迭代的子集。在我看来,我们可以应用动态算法来利用这种现象。但是,因为我们仍然需要对每个n 进行分区,例如n=3 = 3 +0, 2+1, 1+2。我们仍然需要做很多冗余的组合计算。
有什么想法可以改进吗?
【问题讨论】:
-
使用递归方法。您的代码仅适用于两个级别 (i,j) 而不是 (i,j,k.l,....)。
-
不确定是作业转储还是真正的问题。
标签: java c# c algorithm dynamic-programming