这是这是我伴学笔记创作活动的第五篇笔记,在刷题思考篇的中篇我主要分享了如何使用AI来进行代码学习,这篇我将来尝试使用AI来做一些比较难的题目,看看我能不能在AI的帮助下做出来。
那么今天尝试的题目是:
问题描述
小R正在计划一次从地点A到地点B的徒步旅行,总路程需要 N
天。为了在旅途中保持充足的能量,小R每天必须消耗1份食物。幸运的是,小R在路途中每天都会经过一个补给站,可以购买食物进行补充。然而,每个补给站的食物每份的价格可能不同,并且小R最多只能同时携带 K
份食物。
现在,小R希望在保证每天都有食物的前提下,以最小的花费完成这次徒步旅行。你能帮助小R计算出最低的花费是多少吗?
测试样例
样例1:
输入:
n = 5 ,k = 2 ,data = [1, 2, 3, 3, 2]
输出:9
样例2:
输入:
n = 6 ,k = 3 ,data = [4, 1, 5, 2, 1, 3]
输出:9
样例3:
输入:
n = 4 ,k = 1 ,data = [3, 2, 4, 1]
输出:10
我相信动态规划问题一直都是大家在开始学习算法时会感到非常头疼的一类题目,我也是,那让我们看看AI能带给我哪些帮助。
我先是想让AI给我一点思路:
可以看到,AI将具体的问题理解、数据结构选择、算法步骤以及关键点都提了出来,非常详细,同时它也给予了我们一些提示问题,也变相告诉我们一部分解题的重点:
尝试写写代码:
def solution(n, k, data):
# Edit your code here
food = 0
cost = 0
for i in range(n):
if food < k:
num = min(k - food, n - i)
min_price = min(data[i:i+k])
food += num
cost += num
food -= 1
return cost
if __name__ == "__main__":
# Add your test cases here
print(solution(5, 2, [1, 2, 3, 3, 2]) == 9)
设置了一个food变量存储现有的食物数,设置了一个cost变量存储花的钱数,如果food的数量小于可以携带的数量,则可以购买,找到两天内的最小值进行购买食物的操作,最后计算购买的食物,以及累加花的钱数。
输出为11,不是最优,同答案里的9不同,可能是循环的时候在什么地方多算了几步,检查后发现在设置购买食物的逻辑时出现了错误,事已至此,来吧,让我们看看AI怎么说:
它总结了我出现的问题,确实是购买食物时出现了问题。随后AI给出了改进后的代码,还告诉了我关键的改进点在哪里:
但是结果。。呃。似乎是翻车了:
看来针对稍微困难一点的题目,AI还是无法给出正确解答的,不过AI在过程中给出的思路还是对解题有非常大的启发。 对于这道题我也感到十分费解,我不太能理解最优的情况为什么是9,购买操作和花费操作的顺序是什么非常影响最终的结果,如果有会的大佬欢迎评论区告诉我!