gpt4 book ai didi

Codechef解决方案动态规划

转载 作者:行者123 更新时间:2023-11-30 19:19:29 26 4
gpt4 key购买 nike

这是 code-chef 六月挑战问题(比赛已结束)

厨师喜欢游戏!但他喜欢发明自己的东西。现在他玩游戏“数字跳跃”。 Chef 具有数字序列 S1、S2、...、SN、。他停留在第一位数字(S1),并希望以最少的跳跃次数到达最后一位数字(SN)。当停留在索引为 i(数字 Si)的某个数字 x 时,Chef 可以跳转到索引为 i - 1 (Si-1) 和 i + 1 (Si+1) 的数字,但他不能跳出顺序。或者他可以跳转到任何具有相同值 x 的数字。帮助 Chef 找到从数字 S1 到达数字 SN 所需的最少跳跃次数。

输入

输入包含一行,由长度为 N 的字符串 S(数字序列)组成。

输出

在单行中打印单个整数 - 他需要的最小跳转次数。

约束

1 ≤ N ≤ 10^5S的每个符号都是0到9的数字。

示例

输入:01234567890

输出:1

输入:012134444444443

输出:4

这是他提供的解决方案之一

设 dp[i] 表示从位置 0 到位置 i 所需的步数。根据之前的观察,我们知道不需要超过 20 个步骤。所以让我们进行 20 次迭代。

在开始所有迭代之前,我们将为所有其他 i > 1 设置 dp[1] = 0 和 dp[i] = 无穷大。在每次迭代中,我们将计算 Q[k],其中 Q[k] 是 dp[i] 的最小值,使得 s[i] = k。 IE。 Q[k]表示该数字等于k的位置上dp的最小值。

我们可以通过以下方法更新dp。dp[i] = min(dp[i], dp[i - 1] + 1, dp[i + 1] + 1, Q[s[i]] + 1);

这里术语 dp[i - 1] + 1 表示我们来自先前的位置,即 (i - 1)。这里术语 dp[i + 1] + 1 表示我们来自下一个位置,即 (i + 1)。Q[s[i]] + 1 表示从与当前第 i 位数字相同的位置开始所需的最少运算次数。

您可以在此处查看问题和社论

http://discuss.codechef.com/questions/44800/digjump-editorial?sort=votes&page=2

我不明白为什么他认为20次迭代就足够了。我理解我们最多需要20次跳转才能达到任何数字,但这与迭代次数有什么关系。事实上,有一些用户评论他们只迭代了三次(前进、后退和再次前进),而一些用户迭代了 10 次并获得了他们的解决方案被接受。在 bfs 解决方案中,图表看起来到底如何。任何人都可以用一个小例子解释一下。

最佳答案

我已经通过简单的 BFS 和一次修改解决了这个问题。一旦您第一次到达距离 d 的数字 D,您就可以将到其他具有数字 D 的位置的距离更新为 d+1.

关于Codechef解决方案动态规划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com