Mogg level
获赞
42
粉丝
6
关注
0
看过 TA
2
北京航空航天大学
2021
C++
IP属地:广东
暂未填写个人简介
私信
关注
2020-03-20 12:24
已编辑
北京航空航天大学 C++
两道编程题,一道模拟一道dp 题目一 题意 有一叠扑克牌,每张牌介于1和10之间 有四种出牌方法:  单出1张 出2张对子 出五张顺子,如12345 出三连对子,如112233  给10个数,表示1-10每种牌有几张,问最少要多少次能出完 思路 爆搜dfs 1-10,每次枚举能否按照四种情况出牌,如果当前牌出完了,dfs下一个,否则继续dfs当前值复杂度大概在 题目二 题意 首先定义上升字符串,,比如aaa,abc是,acb不是给n个上升字符串,选择任意个拼起来,问能拼出来的最长上升字符串长度 思路 排序+dp 首先按照字符串最后一个字母,由小到大排序,如果最后一个相同,按第一个由小到大 然后...
菜鸡N+1号:贴个不用排序的代码,不知道对不对,欢迎指错 # 输入代码 import sys inp = [] while True: line = sys.stdin.readline().strip() if line == &(3091)#39;': break inp.append(line) (3092)# 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])
投递阿里巴巴集团等公司10个岗位 >
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务