原题链接:蓝桥杯算法训练VIP-乘积最大
解题思路:
递归搜索。
假设字符串长度为n,下标从0开始。则我们可以在第0~n-2位数后面放”ד号。
接下来遍历所有符合条件的位置,每个位置有两种情况,放和不放。
求出所有符合条件的结果,即可求出答案。
具体求解过程可参考下面代码,有详细注释。
注意事项:
参考代码:
def dfs(T,now): #T中记录乘号的位置,now为遍历到s中的第几个数 global n,m,s,ans if len(T) == m: #如果T中已经标记了m个乘号位置 num = 1 #存放乘积 t = 0 for item in T: #求乘积 num = num * int(s[t:item+1]) t = item+1 num = num * int(s[t:]) #不要忘记最后一个要乘的数 if num > ans: ans = num return if now >= n-1: return dfs(T+[now],now+1) #在第now位数后面放乘号 dfs(T,now+1) #不在第now位数后面放乘号 if __name__ == '__main__': n,m = map(int,input().strip().split()) s = input().strip() ans = 0 #存放最终答案 dfs([],0) print(ans)
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复