p-7-11汽车加油问题
原创
©著作权归作者所有:来自51CTO博客作者塞上江南o的原创作品,请联系作者获取转载授权,否则将追究法律责任
1. 题目描述
一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。
2. 输入格式:
第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n公里,且旅途中有 k个加油站。 第二行有 k+1 个整数,表示第
k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油。 第 k+1 个加油站表示目的地。
3. 输出格式:
输出最少加油次数。如果无法到达目的地,则输出“No Solution!”。
4. 输入样例
7 7
1 2 3 4 5 1 6 6
5. 输出样例
4
#include <bits/stdc++.h>
using namespace std;
int solve(int ins, int num, int lv, int all, int distance[]){
for(int i = 0; i < num + 1; i++){
if(ins < distance[i])
return -1;
if(lv >= distance[i]) // 如果油量可以支撑下一段路,则继续走
lv -= distance[i];
else{ //否则加满油
lv = ins - distance[i];
all++; // 加油次数增加
}
}
return all;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0); // 以上三句是优化代码
int ins; // 汽车加完油后能行驶的最大距离
int num; // 加油站的数量
int lv; // 邮箱中的油量可以走的距离
int all = 0; // 总的加油次数
cin >> ins >> num;
int distance[num + 1]; // 汽车站间的距离
lv = ins; // 油量赋初值
for(int i = 0; i < num + 1; i++)
cin >> distance[i];
int res = solve(ins, num, lv, all, distance);
if(res != -1)
cout << res << endl;
else
cout << "No Solution!";
return 0;
}