1750汽车加油问题(贪心)

Description

一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。
对于给定的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 }

 

posted @ 2020-12-06 13:48  Xxiaoyu  阅读(70)  评论(0编辑  收藏  举报