阿里巴巴校园招聘在线笔试3.20场

两道编程题,一道模拟一道dp

题目一

题意

有一叠扑克牌,每张牌介于1和10之间

有四种出牌方法:

  1. 单出1张
  2. 出2张对子
  3. 出五张顺子,如12345
  4. 出三连对子,如112233

给10个数,表示1-10每种牌有几张,问最少要多少次能出完

思路

爆搜
dfs 1-10,每次枚举能否按照四种情况出牌,如果当前牌出完了,dfs下一个,否则继续dfs当前值
复杂度大概在

题目二

题意

首先定义上升字符串,,比如aaa,abc是,acb不是
给n个上升字符串,选择任意个拼起来,问能拼出来的最长上升字符串长度

思路

排序+dp

首先按照字符串最后一个字母,由小到大排序,如果最后一个相同,按第一个由小到大

然后定义dp数组,dp[i]表示以字母'a'+i结尾的最长上升字符串长度
枚举输入的字符串,假设当前是s,l=s[0]-'a',r=*s.rbegin()-'a'
那么
复杂度大概

#阿里巴巴##实习##笔试题目##题解#
全部评论
贴个不用排序的代码,不知道对不对,欢迎指错 # 输入代码 import sys inp = [] while True:     line = sys.stdin.readline().strip()     if line == '':         break     inp.append(line) (3094)# n = int(inp[0][0])  # 长度 num = inp[1:] n = len(num) (3093)# num = sorted(num) dp = [[0 for _ in range(26)] for _ in range(26)] # dp[i][j]表示两个字母之间的最大长度,dp[0][1]为以字符a为开头,字符b为结尾的最大长度,dp[0][25]表示以字符a为开头,字符z为结尾的最大长度 for i in range(n):     temp = num[i]     for j in range(ord(temp[0]) - 97 + 1):         for k in range(25, ord(temp[-1]) - 97 - 1, -1):             dp[j][k] = max(dp[j][k], dp[j][ord(temp[0]) - 97] + dp[ord(temp[-1]) - 97][k] + len(temp)) print(dp[0][25])
3 回复
分享
发布于 2020-03-20 12:45
bd,学习了
2 回复
分享
发布于 2020-03-20 11:08
联易融
校招火热招聘中
官网直投
云玩家,第一题数据范围?
2 回复
分享
发布于 2020-03-20 11:27
请问第一题后两种情况的优先级是什么
2 回复
分享
发布于 2020-03-20 11:28
请问这样对吗 dp[j]代表最大以j结尾的字符最大长度
2 回复
分享
发布于 2020-03-20 12:31
请问下笔试的时候是需要自己读取输入吗
2 回复
分享
发布于 2020-03-20 12:57
云玩家,准备搞第二场。第一题感觉只能暴力的样子,第二题感觉应该可以按照结束字符桶排序+dp,每一个桶里面先预处理,把类似aaa的串全部提出来,再依次用递推方程求最大长度,比方说某一个桶里面某个字符开始为c,结束为f,此时最大长度是dp[f] = dp[c]+len,保留每个桶的最大值加上前面提出来的类似aaa串的总长度即可,复杂度为常数?
2 回复
分享
发布于 2020-03-20 14:54
第一道题动态规划 大佬们看看这个思路对吗?
2 回复
分享
发布于 2020-03-23 20:52
感谢分享哈哈
1 回复
分享
发布于 2020-03-20 10:45
1 回复
分享
发布于 2020-03-20 10:45
第二题排序以后直接贪心可以吗
1 回复
分享
发布于 2020-03-20 10:48
第二题只用存储开始字符结束字符就可以 最奥妙重重的是第一题 我先写的第二题 第一题用的 dfs hash存储已搜索状态 但还是t了 我后来想了想觉得可以通过hash拿背包做 这样复杂度应该会降不少 但估计也和bfs + hash vis 差不多
1 回复
分享
发布于 2020-03-20 10:52
优秀!!
1 回复
分享
发布于 2020-03-20 11:10
第二题能用类似于BFS的思路吗,就是先排序,然后针对当前的字符串去找后面的,进队列;队列存储的是<字符串, 最大长度>,可是我的只过了10%
1 回复
分享
发布于 2020-03-20 11:11
当我忘记了sort头文件时,我的内心是崩溃的!!!
1 回复
分享
发布于 2020-03-20 11:15
感谢大佬分享!
1 回复
分享
发布于 2020-03-20 11:24
有代码么,大佬,我看看和我的有啥不一样
1 回复
分享
发布于 2020-03-20 11:40
接楼上,我自己根据题主的描述尝试写了一下记忆化回溯搜索,欢迎各位指正。。
1 回复
分享
发布于 2020-03-20 13:37
参考lz的思路,题目二的C++实现
1 回复
分享
发布于 2020-03-20 17:00
请问阿里的嵌入式软件工程师岗和机器人研发工程师岗也是这样的难度嘛?
1 回复
分享
发布于 2020-03-20 17:02

相关推荐

42 200 评论
分享
牛客网
牛客企业服务