【发布时间】:2019-12-20 20:58:03
【问题描述】:
我正在尝试解决这个问题:https://www.urionlinejudge.com.br/judge/en/problems/view/1312
XYZ 电视频道正在开发一个新的游戏节目,其中一位参赛者 必须做出一些选择才能获得奖品。游戏包括 一堆三角形的球,每个球都有一个整数值,如 下面的例子显示。
参赛者必须选择他要拿的球和他的 奖品是这些球的价值的总和。然而,参赛者 只有当他也直接接球时才能接任何给定的球 最重要的是。这可能需要使用相同的其他球 规则。请注意,参赛者可以选择不拿任何球,在 在这种情况下奖金为零。
电视节目导演担心 参赛者可以获得给定筹码的最高奖金。既然他是 你的老板,他不知道如何回答这个问题,他 将此任务分配给您。
输入
每个测试用例都用几行来描述。第一行 包含一个整数N,表示堆栈的行数(1 ≤ N ≤ 1000)。接下来 N 行的第 i th 行包含 i 个整数 Bij (−105 ≤ Bij ≤ 105 1 ≤ j ≤ i ≤ N);数字 Bij 是 堆栈的第 i th 行中的第 j th 个球(第一行是 最上面的一个,如果是最左边的,则在每行内第一个球)。
最后一个测试用例后跟一行包含一个零。
输出
Sample Input | Sample Output 4 | 7 3 | 0 -5 3 | 6 -8 2 -8 | 3 9 -2 7 | 2 | -2 | 1 -10 | 3 | 1 | -5 3 | 6 -4 1 | 0 |
我很想知道如何解决这个问题。
似乎可以使用 DP 方法解决,但我不能完全制定递归。两个相邻的球可能有重叠的孩子,这让事情变得有点困难。
【问题讨论】:
-
输出是什么?它没有解释你实际试图计算的内容?这是最高分吗?
-
到目前为止你尝试了什么?
-
如果有人想知道为什么第一个输出是 7:从最后一行选择球 3 和 9,那么你还必须从第三行获得 -8 和 2,-5 和第 2 行 3 个,第 1 行 3 个。 3 + 9 - 8 + 2 - 5 + 3 + 3 = 7。
-
这对于大型案例来说似乎非常繁重。当 N=1000 时,有 500500 个球可供选择,给出 2^500500 种可能的组合。尽管它们中的大多数都崩溃到相同的配置,但仍然会有太多的可能性进行测试(并且没有足够的内存来存储 DP)。通常,即使 N=100 似乎也很难解决。一些技巧和一些运气可以帮助消除部分可能性,但永远不足以使问题变得可行。
-
我认为这可以被视为寻路问题,但您可能会从底部取出 3 个或更多球,它们之间有多个空格,这意味着排除了寻路。
标签: algorithm dynamic-programming