- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解决 TCS MockVita 2019 Round 2 中提出的问题:
问题描述
高斯学校的数学老师 Felix Kline 博士介绍了以下游戏来教他的学生解决问题。他将一系列“跳石”(纸片)排成一行,并在每 block 石头上标记点(正数)。
学生从一端开始跳到另一端。一个人可以踩在一 block 石头上并将石头上的数字加到他们的累计分数中,或者跳过一 block 石头并落在下一 block 石头上。在这种情况下,他们得到的分数是他们落地的石头上标记的两倍,但没有得到他们跳过的石头上标记的分数。
在旅程中最多一次,学生可以(如果他们选择的话)进行“双跳”——也就是说,他们连续跳过两 block 石头——他们将获得三倍于他们落地的石头的点数上,但不是他们跳过的石头的点。
老师希望他的学生做一些思考并想出一个计划来获得尽可能高的分数。给定石子序列上的数字,编写一个程序以确定可能的最大分数。
约束
序列中的石子数<30
输入格式
第一行包含N,整数的个数(这是一个正整数)
下一行包含用逗号分隔的 N 个点(每个点都是正整数)。这些是石头上按放置顺序排列的点。
输出
一个整数代表最高分
测试用例
解释
示例 1
输入
3
4,2,3
输出
10
解释
有 3 block 石头(N=3),点数(按排列顺序)分别为 4,2 和 3。
如果我们踩到第一 block 石头跳过第二 block 得到 4 + 2 x 3 = 10。双跳到第三 block 石头只会得到 9。因此结果是 10,没有使用双跳
示例 2
输入
6
4,5,6,7,4,5
输出
35
解释
N=6,给出点数顺序。获得35的一种方法是先双跳到石头3(3 x 6=18),转到石头4(7)并跳到石头6 (10分)共35分。二段跳只用了一次,结果是35分。
我发现这是一个动态规划问题,但我不知道我做错了什么,因为我的解决方案无法通过所有测试用例。我的代码通过了我创建的所有测试。
unordered_map<int, int> lookup;
int res(int *arr, int n, int i){
if(i == n-1){
return 0;
}
if(i == n-2){
return arr[i+1];
}
if(lookup.find(i) != lookup.end())
return lookup[i];
int maxScore = 0;
if(i< n-3 && flag == false){
flag = true;
maxScore = max(maxScore, 3 * (arr[i+3]) + res(arr, n, i+3));
flag = false;
}
maxScore = max(maxScore, (arr[i+1] + res(arr,n,i+1)));
lookup[i] = max(maxScore, 2 * (arr[i+2]) + res(arr, n, i+2));
return lookup[i];
}
cout << res(arr, n, 0) + arr[0]; // It is inside the main()
我希望您能找到我代码中的错误并给出正确的解决方案,以及任何未通过该解决方案的测试用例。谢谢:)
最佳答案
您不需要任何 map 。您需要记住的只是最后几个最大值。每一步你都有两个选择(除了前两个),以二段跳结束或不二段跳结束。如果你不想做 dj 那么你最好的乐趣是最后一个石头的最大值 + 当前和最后一个之前的石头 + 2 * 当前 max(no_dj[2] + arr[i], no_dj[1] + 2 * arr[i])
。
另一方面,如果你想做 dj 而不是你有三个选择,要么在之前的 dj dj[2] + arr[i]
之后跳过一 block 石头,要么跳过最后一 block 石头在一些 dj dj[1] + 2 * arr[i]
或在当前移动中进行双跳之后 no_dj[0] + 3 * arr[i]
。
int res(int *arr, int n){
int no_dj[3]{ 0, 0, arr[0]};
int dj[3]{ 0, 0, 0};
for(int i = 1; i < n; i++){
int best_nodj = max(no_dj[1] + 2 * arr[i], no_dj[2] + arr[i]);
int best_dj = 0;
if(i > 1) best_dj = max(max(dj[1] + 2 * arr[i], dj[2] + arr[i]), no_dj[0] + 3 * arr[i]);
no_dj[0] = no_dj[1];
no_dj[1] = no_dj[2];
no_dj[2] = best_nodj;
dj[0] = dj[1];
dj[1] = dj[2];
dj[2] = best_dj;
}
return max(no_dj[2], dj[2]);
}
您只需记住两个包含三个元素的数组。双跳后的最后三个最大值和没有双跳的最后三个最大值。
关于c++ - TCS MockVita 2019 第二轮问题 : Hop Game,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56637078/
我正在制作一个简单的游戏,其中敌人在屏幕上四处移动,我们需要射击他们。我想模块化我的代码,所以我想用一个函数替换游戏循环逻辑。但是一旦我这样做,就会有一个下降以 fps 为单位。在while循环中调用
我使用的是标准匹配用户界面和两台 iPad iOS6。问题是当我在第一台设备中创建新的匹配项时,第二台设备应该在我查看匹配用户界面时看到现有的匹配项,但事实并非如此。我确定我的代码是正确的。这是方法:
在 The Practical Guide to Defect Prevention ,作者提到在软件开发中提高生产力的一种创造性方法是实现“生产力游戏”,员工以类似于在 Stack Overflow
我无法让游戏中心与我的应用一起工作。 每当我尝试对用户进行身份验证时,它都会返回以下错误: "The requested operation could not be completed becaus
我是 Game Maker 的新手。我已经创建了一个基于物理的小游戏的机制,并且我使用了 YoYo Games 教程中概述的方法来创建复杂的物理对象 (http://www.yoyogames.com
我正在编写一个 GML 脚本,想知道如何使消息出现在下一行: 例如。 show_message("Hello" + *something* + "World") 输出: Hello World 最佳答
关于这个已经有几个问题,但我按照他们的步骤解决了它,但它似乎对我不起作用。这是我所做的: 1.我仔细检查了 xcode 项目中的包标识符是否与供应门户上的供应配置文件完全相同(它还表示已启用 Game
GameKit 是否允许您以编程方式邀请特定的 Game Center friend 参加比赛,即不提供 GC ViewController?以下 handleInviteFromGameCenter
我正在 Game Maker: Studio 1.4 中构建客户端/服务器应用程序,需要运行游戏的两个实例进行测试。不幸的是,IDE 的运行/调试按钮在启动第一个副本后会自行禁用。有没有办法配置 ID
游戏已启动,我收到了用户的状态,一切就绪。我正在尝试构建一个问答游戏。我正在从远程服务器获取所有信息,其中包括基于问题的图像 Assets 。我可以获取远程数据,但无法显示图像。看来 facebook
我正在努力度过让 Game Center 集成发挥作用的第一阶段。我已经走到这一步了: 我创建了一个干净的新应用,在应用委托(delegate)中添加了 GameKit header 和基本的 aut
DragonRuby Game Toolkit 中好像没有按钮的概念。如何创建按钮等 UI 组件? 最佳答案 按钮(和任何其他 UI 组件)可以解构为 primitives: 按钮有一个点击空间(通常
我正在使用 DragonRuby Game Toolkit 构建游戏。 如何检测一个对象(例如 Sprite)是否与另一个 Sprite 发生碰撞? 这是放置在屏幕上的两个 Sprite 。关于如何检
我已经在我的应用中成功实现了 Game Center 排行榜,并使用 iOS 模拟器进行了测试。将新版本提交到 iTunes Connect 后,沙盒分数会转换到真正的 Game Center 吗?我
我读到 Unity 在渲染清晰文本时出现问题,我尝试了几种不同的修复方法:在导入的字体上设置较大的字体大小,并将字符设置更改为 unicode,使文本大小变大,然后缩放它向下,将过滤模式设置为指向像素
假设角色在游戏中跳跃需要一整秒,如果 FPS 为 10fps、30fps、100fps 等,游戏开发人员如何将跳跃时间保持在 1 秒? - 如果你明白我的意思,你会如何阻止游戏的 fps 基本上影响游
我一直在询问有关我的 Libgdx 游戏 Google Play 游戏服务配置错误的问题。到目前为止,我已经解决了登录错误,但现在我被困在解锁成就上。所以我发布我的代码可能有人可以帮助我。 这是我在
我正在将我的 Android 应用程序更新到最新的 Facebook SDK (4.0.0)。当我创建 GameRequestDialog 时,它向我显示此消息:“游戏请求仅适用于游戏”,而不是向我的
我创建了 GameOver.sks 和 GameOver.swift。如何在默认的 sprite-kit 项目中连接它们,例如 GameSense.sks 和 GameSense.swift? 最佳答
当前收到一个错误,指出无法找到我的 bean 中的 bankOffer 属性。 它来 self 的 game.jsp 文件,如下所示:
我是一名优秀的程序员,十分优秀!