小赛旅游
小赛旅游
小赛很想到外面的世界看看,于是收拾行装准备旅行。背了一个大竹筐,竹筐里装满了路上吃的,这些吃的够它走N公里。为了规划路线,它查看了地图,沿途中有若干个村庄,在这些村庄它都可以补充食物。但每次补充食物都需要花费时间,在它竹筐的食物足够可以走到下一个村庄的时候它就不用补充,这样背起来不累而且不花费时间。地图上可以看到村庄之间的距离,现在它要规划一下它的路线,确定在哪些村庄补充食物可以使沿途补充食物的次数最少。你能帮帮小赛吗?
输入
第一行有两个数字,第一个数字为竹筐装满可以走的公里数,即N值;第二个数字为起点到终点之间的村庄个数。
第二行为起点和村庄、村庄之间、村庄和终点之间的距离。
这些数字都为整数,且范围不能超过一个int型表达的范围。
样例输入
7 4
5 6 3 2 2
输出
程序输出为至少需要补充食物的次数。
样例输出
2
时间限制
C/C++语言:1000MS其它语言:3000MS
内存限制
C/C++语言:65536KB其它语言:589824KB
package Test;
import java.util.Scanner;
public class Test9 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int originalN=n;
int number=sc.nextInt();
int[] villages=new int[number+1];
for(int i=0;i<number+1;i++){
villages[i]=sc.nextInt();
/**
* 如果无法达到就输出0
* 只要有一个距离大于公里数n,就一定无法达到
*/
if(villages[i]>n){
System.out.println(0);
return;
}
}
int count=0;
for(int i=0;i<number+1;i++){
while(i<number && n>=(villages[i]+villages[i+1])){
n-=villages[i];
i++;
}
if(i!=number || n<villages[i]){
count++;
n=originalN;
}
}
System.out.println(count);
}
}

浙公网安备 33010602011771号