python 给汽车加油 贪心算法

一辆汽车加满油后可行驶 d公里。旅途中有若干个加油站,指出应在哪些加油站停靠加油(每次加油都加满),使沿途加油次数最少。

第一行有 2 个正整数d和 k(k<=1000 ),表示汽车加满油后可行驶d公里,且旅途中有 k个加油站。 第二行有 k个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油(到达最后一个加油站则认为到达目的地)。

输出:
输出最少加油次数。如果无法到达目的地,则输出“No Solution!”。

输入:
7 7
1 2 3 4 5 1 6
输出:
3

img


n, k = map(int, input().split())
d = list(map(int, input().split()))
c = 0  # 初始化加油次数
now = n  # 初始化当前油量
for i in range(k ):  # 开始旅途~
    if now < d[i]:  # 判断当前油量是否可以到达下一个加油站
        c += 1  # 如果无法到达,则需要加油。加油次数+1
        now = n  # 重新初始化油量
    now -= d[i]  # 减去到达下一站所需油量
    if now < 0:  # 判断此时当前油量
        c = 'No Solution'  # 当前油量为负,说明无法到达下一站,输出无解
        break  # 不能再愉快的旅行了
print(c)  # 输出结果

代码如下:

img

img


def oil(n, distance):
    i = 0                           # 起始站加油算第一次(已加满的条件下,设为0)
    count = 0                       # 当前站与下一站的距离
    for one in distance:
        if one > n:
            print("No Solution!")
            return -1
        count += one                # 试着继续累加公里数,尽量跑最长距离
        if n < count:               # 加满油开始持续跑,超过当前加油距离累加公里数
            #print('%d公里开始处加油'%(one))# 累加距离等于或超过一次跑最长距离,要加油了
            count = one             # 加满油,从新开始累计跑的距离
            i += 1                  # 计加油次数
    return i



d, k = map(int, input().split())

dis = list(map(int, input().split()))
num = oil(d, dis)
if num > 0:
    print(num)


有兴趣可以看一下下面的链接:

贪心算法解决汽车加油问题_冰履踏青云的博客-CSDN博客_汽车加油问题贪心算法 文章目录1. 何为贪心算法2. 贪心算法的特点3. 汽车加油问题问题描述图解代码实现小结1. 何为贪心算法贪心算法又称贪婪算法,是指在对问题求解时,总是做出在当前步骤看来是最好的选择。也就是说,不从整体最优上加以考虑,所做出的是在某种意义上的局部最优解。2. 贪心算法的特点贪心策略的选择只跟当前有关,跟前面的状态没有关系;贪心算法通过迭代把总问题分解为若干个子问题,通过求解子问题,然后把子问题最优解合成总问题的最优解;贪心算法可以归结为每次求最大值(最小值)3. 汽车加油问题问题描述一 https://blog.csdn.net/weixin_44327634/article/details/123476187?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-16-123476187-ask-7711252.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-16-123476187-ask-7711252.pc_feed_download_top3ask

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632