Java 试图找出要使用的算法

Java 试图找出要使用的算法,java,algorithm,Java,Algorithm,你有一个游戏的输入。 每个游戏都有名气(可能是负面的)和必备游戏(必须在玩当前游戏之前玩这些游戏) 你想通过玩一套有效的游戏来获得最大的声誉 我的一个想法是使用加权有向图,但是你仍然需要尝试图中的每一对节点来找到最优解 有什么想法吗?你能玩的游戏最多吗?然后,它听起来像是背包问题的一个变体(在本文中找到解决这个问题的一些方法,即使这个问题是NP完全的,因此在原则上不能有效地解决) 如果你想玩多少游戏就玩多少,从计算的角度来说还是很难的。 对于每一个先决条件游戏,您可以通过添加其启用的游戏的声望来

你有一个游戏的输入。 每个游戏都有名气(可能是负面的)和必备游戏(必须在玩当前游戏之前玩这些游戏)

你想通过玩一套有效的游戏来获得最大的声誉

我的一个想法是使用加权有向图,但是你仍然需要尝试图中的每一对节点来找到最优解


有什么想法吗?

你能玩的游戏最多吗?然后,它听起来像是背包问题的一个变体(在本文中找到解决这个问题的一些方法,即使这个问题是NP完全的,因此在原则上不能有效地解决)

如果你想玩多少游戏就玩多少,从计算的角度来说还是很难的。
对于每一个先决条件游戏,您可以通过添加其启用的游戏的声望来计算通过玩该游戏获得的点数。当然,这些条件会随着您玩的每个先决条件而改变,因为以后的先决条件可能会启用以前先决条件启用的游戏,从而降低它们提供的声望。我猜你仍然在尝试所有的2^p组合作为p先决条件游戏。

也许an会对你有所帮助,也就是说,你会对图表中的每一条路线进行有根据的猜测(该路线的最低知名度),遵循最有希望的一条,如果你发现它低于对尚未走的路线的猜测,遵循新路线并在此处停止。

以下方法适用于具有非负边的图形: 由于游戏之间存在依赖关系,因此该图是非循环的。您可以对图中的所有边求反,并在P-time中找到最短路径。这将给出原始图形中的最长路径

编辑:


由于图是非循环的,最短路径也适用于负边。请参见

中DAG中的最短/最长路径,并给出问题的描述,听起来玩所有游戏都是最好的解决方案。@Simon:不,有些游戏可能有负面影响(例如:成本)与它们相关。你有关于
n
可以有多大的信息吗?n小于或等于1000。我在考虑使用Bellman Ford,它可以处理负边缘。@是的,可以。你需要重复每一个游戏作为一个源来找到最长的路径。找到路径并不能解决问题。考虑4个游戏,A、B、C、D. B、C和D在A上有2个声名,而B、C、D有名号+ 1。要找到的最大路径的总名气为-1(因此不是很好),但最佳解决方案是每场比赛都进行。@missingno这张图怎么样:(节点:S,A,B,B,C,D和边:S->[A=-2,B=1,C=1],A->[B=1,C=1],B->[A=-2,C=1],C->[A=-2,B=1],D->[B=1,C=1])。来自源S的最长路径应产生(一条可能的路径)S->B->C,路径权重(fame)=2。不是每场比赛都赢!