Description
一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。
对于给定的n和k个加油站位置,计算最少加油次数。
对于给定的n和k个加油站位置,计算最少加油次数。
Input
输入数据的第一行有2 个正整数n和k(n≤5000,k≤1000),表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。
Output
将计算出的最少加油次数输出。如果无法到达目的地,则输出“No Solution!”。
Sample
Input
7 7 1 2 3 4 5 1 6 6
Output
4
1 #include <iostream> 2 #include <string.h> 3 #include <math.h> 4 #include <algorithm> 5 6 #define inf 0x3f3f3f3f 7 8 using namespace std; 9 10 int main() 11 { 12 int n, k, cur, num, i; 13 int a[5005]; 14 cin >> k >> n; 15 for(i=0;i<n+1;i++) 16 { 17 cin >> a[i]; 18 } 19 cur = k; 20 num = 0; 21 for(i=0;i<n+1;i++) 22 { 23 if(a[i]>cur) 24 { 25 num++; 26 cur = k; 27 } 28 cur -= a[i]; 29 if(cur<0) break; 30 } 31 if(i<n+1) cout << "No Solution!" << endl; 32 else cout << num << endl; 33 return 0; 34 }