【发布时间】:2019-12-03 23:36:55
【问题描述】:
我遇到了一个应该使用动态编程的问题,但我真的被卡住了。我真的很想了解如何解决这个问题。
问题如下:给定一个大小为 N 的数组,每个条目代表一个具有给定值的城市。在每一轮,你必须选择在哪里建造一堵墙。 “敌人”然后选择从哪一方(东或西)进攻,摧毁所有的城市,直到墙。您只从仍然存在的城市收集价值。敌人以最佳方式摧毁城市,这意味着它总是会最小化你在游戏结束时可以获得的价值(不是每轮最小化,贪婪地)。
一个简单的例子:
数组:8、6、2、4、2
第一轮 - 最好的选择是在价值 6 和价值 2 的城市之间建造。敌人从西面进攻,收集价值 8。
第二轮 - 最好的选择是在价值 2 和价值 4 的城市之间建造。敌人从东面进攻,收集价值 2。
此游戏的总价值为 10。
我正在寻找一个递归公式来计算我在每场比赛中可以获得的最大可能值。我想用这个递归公式来创建一个动态编程算法。任何帮助将不胜感激。
【问题讨论】:
标签: algorithm dynamic-programming