小赛旅游
题目描述(图论)
小赛很想到外面的世界看看,于是收拾行装准备旅行。背了一个大竹筐,竹筐里装满了路上吃的,这些吃的够它走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)