Description
一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应
在哪些加油站停靠加油,使沿途加油次数最少。对于给定的n(n <= 5000)和k(k <= 1024)个加油站位置,编程计算最少加油次数。
Input
第一行有2个正整数n和k,表示汽车加满油后可行驶 n 公里,且旅途中有 k个加油站。接下来的 1 行中,有 k+1 个整数,依次表示第 i 个加油站与第 i-1 个加油站之间的距离。且第 1 整数表示第一个加油站与起点的距离,起点时汽车已加满油。第 k+1 个整数表示目的地与最后一个加油站的距离。
Output
输出编程计算出的最少加油次数。如果无法到达目的地,则输出"No Solution!".
Sample Input
7 7
1 2 3 4 5 1 6 6
Sample Output
4
CODE
package com.tset;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;
/**
*
* @author dsw
* 汽车加油问题
*
*/
public class TestCarAdd {
/**
* length : 表示汽车加满油后可行驶 length 公里
* num : 旅途中有 num个加油站
* array :表示第 i 个加油站与第 i-1 个加油站之间的距离。
* 且第 1 整数表示第一个加油站与起点的距离,起点时汽车已加满油。
* 第 k+1 个整数表示目的地与最后一个加油站的距离。
* @param args
*
*/
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
int num = sc.nextInt();
Vector<Integer> array = new Vector<Integer>();
for(int i=0;i<=num;i++){
int k = sc.nextInt();
array.add(i, k);
}
addGas(array,length,num);
}
/**
* 汽车加油方法
* totlength : 记录走过的路程
* count : 记录加油次数
* @param array
* @param length
* @param num
*/
public static void addGas(Vector<Integer> array,int length,int num){
Iterator<Integer> it = array.iterator();
int totlength = 0;
int count = 0;
while(it.hasNext()){
int next = it.next();
if(next>length){
System.out.println("No Solution!");
} else {
totlength =next+totlength;
if(totlength>length){
count+=1;
totlength = next;
}
}
}
System.out.println(count);
}
}