原题链接:蓝桥杯算法提高VIP-贪吃的大嘴
解题思路:
注意事项:
参考代码:
def find_cakes(cakes, m): # 初始化动态规划数组,dp[i][j]表示前i个小蛋糕中选择若干个,美味度之和为j所需的最小数量 n = len(cakes) dp = [[float('inf')] * (m + 1) for _ in range(n + 1)] # 初始状态,前0个小蛋糕,美味度之和为0所需的数量为0 for i in range(n + 1): dp[i][0] = 0 # 动态规划递推 for i in range(1, n + 1): for j in range(1, m + 1): # 如果当前小蛋糕的美味度大于当前目标和,不选择当前小蛋糕 if cakes[i - 1] > j: dp[i][j] = dp[i - 1][j] else: # 选择当前小蛋糕或者不选择,取最小值 dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - cakes[i - 1]] + 1) # 如果最终的dp[n][m]仍然为inf,表示无法达到目标和 if dp[n][m] == float('inf'): return "><" return dp[i][j] a, b = map(int, input().strip().split()) obj = [] for i in range(b): m, n=map(int,input().strip().split()) for j in range(n): obj.append(m) cakes = obj target_deliciousness = a result = find_cakes(cakes, target_deliciousness) print(result)
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复