灵犀互娱笔试思路分享

20道选择,5道编程,2道游戏调研,编程不让用本地编译器。时间很长:可以做三个小时

第四题:

题目:玩家走迷宫,可以向上向右向下走,起点(0,0),终点(m-1, n-1),每个格子一个分数,不能走已经走过的格子,求最大得分(注意:走到上下边缘的时候,可以自动重置分数,向贪吃蛇一样从迷宫另一边出来)。数据范围给的比较宽松,行列都是100。

这个题有个坑,前面说M*N,后面输入的时候又是N行M列,让人搞不清上下是在M上还是在N上。提交的时候要是因为这个不过,可以把MN的输入顺序调换一下。

思路:

dp:定义dp[m][n][3]. dp[i][j][k]表示,通过k方向(k=0:上,1:下,2:右)走到(i,j)的最大得分。

一列一列去遍历.

递推公式如下:

dp[i][j][2] = max({dp[i][j - 1][0] + w[i][j],
                   dp[i][j - 1][1] + w[i][j],
                   dp[i][j - 1][2] + w[i][j]});
dp[i][j][1] = max({dp[i - 1][j][1] + w[i][j],
                   dp[i - 1][j][2] + w[i][j]});
dp[i][j][0] = max({dp[i - 1][j][0] + w[i][j],
                   dp[i - 1][j][2] + w[i][j]});

然后记得处理一下边界情况,就可以了,复杂度O(m*n*3)。

第五题:

两个字符串 a,b。可以对a进行两种操作:1、把a的某些小写字母变成大写;2、把a的某些小写字母删掉

问,通过这两操作能不能a变成b.

q组数据,每组的a长度(n)和b长度(m)不大于1000。q不大于10

可以采用O(q*n*m)的方法

思路:

还是dp,dp[i][j]表示:【a的前i个字符的子串】是否可以 通过这两种操作转换成【b的前j个字符的子串】

这个比较简单,递推公式如下:

if (dp[i - 1][j] == 1 && islower(a[i - 1])) dp[i][j] = 1;
if (dp[i - 1][j - 1] == 1 && a[i - 1] == b[j - 1]) dp[i][j] = 1;
if (dp[i - 1][j - 1] == 1 && (
	islower(a[i - 1]) && isupper(b[j - 1]) && (a[i - 1] - 'a' + 'A' == b[j - 1]) 
  )) dp[i][j] = 1;

#灵犀互娱笔试#
全部评论
佬是什么岗位呀
点赞 回复 分享
发布于 2023-08-26 12:30 浙江
第五题O(q*n*m)用python超时了
点赞 回复 分享
发布于 2023-08-26 12:37 四川
请问选择题考的哪些内容
点赞 回复 分享
发布于 2023-08-26 13:17 广东
第三题佬还记得思路吗,我只有20
点赞 回复 分享
发布于 2023-08-26 18:03 陕西

相关推荐

评论
2
14
分享

创作者周榜

更多
牛客网
牛客企业服务