小赛旅游

小赛旅游

小赛很想到外面的世界看看,于是收拾行装准备旅行。背了一个大竹筐,竹筐里装满了路上吃的,这些吃的够它走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);
    }
}
posted @ 2020-04-06 11:09  别再闹了  阅读(64)  评论(0)    收藏  举报