动态编程:检索所有解决方案

时间:2013-08-09 17:15:32

标签: algorithm dynamic-programming

我已成功使用DP来解决问题。我面临的问题是,现在如果我想重建解决方案,我最终只能采用一种方法来获得最佳解决方案。有没有办法,这样我就可以回溯所有可能导致最佳结果的方式/选择?

例如,如果我从具有技能{1,2,2,1}的球员a,b,c,d中选择一支球队,那么我可以获得最佳的球队技能数,我可以获得一种可能的方式将此作为{{a,b},{c,d}}来实现。我正在寻找的是一种方式,这样我就可以通过所有方式将团队的技能数量公平地划分为3,即{{a,c},{b,d}}和{{a, b},{c,d}}

2 个答案:

答案 0 :(得分:0)

如果X是玩家数量。 (X-1)!是可能的解决方案的数量。然后你可以使用for循环,将可能的解决方案作为你的长度,如果结果等于你的最佳团队技能,那么将结果存储在一个数组中。

答案 1 :(得分:0)

DP中的主要步骤是通过了解子问题的解决方案来找到问题的解决方案。这是通过查找子问题的最小(或最大)值来完成的。有了它,您可以通过将问题与具有最小(或最大)值的子问题连接起来构建有向图。就像page上的最后一张图片一样。要找到所有解决方案,只需从整个问题的解决方案中找到所有可能的路径。