- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 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/
我正在尝试解决这个问题,但在 codechef 上显示错误答案,问题链接是 http://www.codechef.com/problems/STATUES/ .在系统上,它显示正确的答案,在尝试了很
当我运行这段代码时,为什么它给出了不正确的输出?在我的系统中,我得到了正确的输出。图中第一行是数字测试用例,后面是输入和输出。 #include int main() { double fa
当我运行这段代码时,为什么它给出了不正确的输出?在我的系统中,我得到了正确的输出。我的输出与 link 中给出的输出相同但他们仍然不接受。 int main() { int t, n, b,
以下是my solution至 a problem on codechef . 我在我的计算机上获得了正确的输出,但在 codechef 上却没有。 我在我的代码中找不到错误。 问题是将数组除以其元素
https://www.codechef.com/problems/RIGHTRI 毕达哥拉斯定理问题非常简单,但是当我使用斜率法做同样的事情时,我无法找出可能有什么问题。以下是我的代码: #incl
我正在使用以下代码解决 https://www.codechef.com/problems/FLOW009 的问题 #include int main(int argc, char const *a
我是CodeChef的新手,想尝试几个问题,所以我解决了“Bytelandian金币”问题。 ( http://www.codechef.com/problems/COINS/ ) 我在计算机上得到即
CodeChef 问题: Shivam 是世界上最年轻的程序员,他只有 12 岁。 Shivam 正在学习编程,今天他正在编写他的第一个程序。 程序很简单,给定两个整数A和B,编写一个程序将这两个数字
问题 给定 N 和 M,Dexter 想知道有多少对 a,b(1 #include int main() { int i,t,flag,j,x,k,m[100],n[100]; scanf(
The Problem 我的代码有什么问题?它在我的 TurboC 编译器上运行完全正常,但在 CodeChef 中给出运行时错误。 Ada 有 N 支蜡笔数组,一些蜡笔朝上,一些朝下。艾达认为,如果
我是一名初学者编码员(我在高中学习了 C++),现在我开始解决这个竞争激烈的编程网站上的问题。我试图解决这个问题,但不太成功。 所以,这是别人的代码,我不明白的是为什么他们从数组中的字符串中减去 'a
因此,在上一次 CodeChef 竞赛(2 月 Cook-Off)中,我在大约 15 分钟内得到了我认为可以解决此问题的算法,但无法得到正确答案。我一直在努力,我检查了很多东西,我不明白我的错误在哪里
我在 Codechef 上提交解决方案后遇到运行时错误。我可以在我的机器上的代码块中编译和执行解决方案。请检查代码并让我知道哪里出了问题。 问题定义- 此问题的所有提交均可用。 在公司中,雇员的报酬如
我收到“sigsegv”,当我尝试在 codechef 上运行以下代码时出现运行时错误,而该代码在我的计算机上使用各种测试输入运行良好。我还牢记中给出的约束问题,但我仍然无法调试它。这道题不是来自任何
有人可以告诉我为什么我会因为 CodeChef 上的以下解决方案而获得 WA 吗? 问题链接:https://www.codechef.com/problems/TWTCLOSE 解决方法: n, k
This Is The Question 这是我的解决方案: #include using namespace std; int main(){ unsigned long numberOf
问题陈述: According to Gregorian Calendar, it was Monday on the date 01/01/2001. If any year is input, W
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
以下代码在我的 DEV-C++ 编译器中完美运行,但是当我在 codechef 中提交时,运行 3-4 秒后显示“SIGABRT ERROR”。我已经研究了这个错误并已尽我所能进行调试,但即使一周后我
以下代码在我的 DEV-C++ 编译器中完美运行,但是当我在 codechef 中提交时,运行 3-4 秒后显示“SIGABRT ERROR”。我已经研究了这个错误并已尽我所能进行调试,但即使一周后我
我是一名优秀的程序员,十分优秀!