小赛旅游

题目描述(图论)

小赛很想到外面的世界看看,于是收拾行装准备旅行。背了一个大竹筐,竹筐里装满了路上吃的,这些吃的够它走N公里。为了规划路线,它查看了地图,沿途中有若干个村庄,在这些村庄它都可以补充食物。但每次补充食物都需要花费时间,在它竹筐的食物足够可以走到下一个村庄的时候它就不用补充,这样背起来不累而且不花费时间。地图上可以看到村庄之间的距离,现在它要规划一下它的路线,确定在哪些村庄补充食物可以使沿途补充食物的次数最少。你能帮帮小赛吗?

输入

第一行有两个数字,第一个数字为竹筐装满可以走的公里数,即N值;第二个数字为起点到终点之间的村庄个数。
第二行为起点和村庄、村庄之间、村庄和终点之间的距离。
这些数字都为整数,且范围不能超过一个int型表达的范围。

输出

程序输出为至少需要补充食物的次数。

样例输入

7 4
5  6  3  2  2

样例输出

2

破题思路

涉及的主要判断过程:
先看不补充粮食能不能到达下一个村庄;
再看如果不能到达下一个村庄,则补充粮食后能不能到达下一个村庄。
其它设置:设置一个记录剩余粮食的变量rest。

程序源码

import sys
n,o = list(map(int,sys.stdin.readline().strip().split()))
distance_list = list(map(int,sys.stdin.readline().strip().split()))
count = 0
rest = n
for i in range(len(distance_list)):
#先是正常减得到一个初始的剩余值
rest = rest-distance_list[i]
#条件一:判断剩余值是否小于0,如果小于则看补充粮食后能否到达下一个村庄
    if rest < 0:
        rest = n-distance_list[i]
#条件二:如果补充粮食后也不能到达下一个村庄,则count即为0
        if rest < 0:
            count = 0
            break
        count += 1
print(count)
原文地址:https://www.cnblogs.com/wisteria68/p/12358563.html