问题描述
一辆虚拟汽车加满油后可行驶n km。旅途中有若干加油站,设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。
输入格式
由文件给出输入数据。第一行有2个正整数n和k,表示汽车加满油后可行驶n km,且旅途中有k个加油站,接下来的1行中有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油,第k-1个加油站表示目的地。
输出格式
将计算的最少加油次数输出,如果无法到达目的地,则输出"N o Solution"。
样例输入:
7 7
1 2 3 4 5 1 6 6
样例输出:
4
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("jy.txt","r",stdin);
int n,k; //n是能跑的距离 k是
cin>>n>>k;
int *dist=new int[k+1]; //k-1与k个加油站的距离
for(int i=0;i<k+1;i++)
cin>>dist[i];
for(int i=0;i<k+1;i++)
{
if(dist[i]>n)
{
cout<<"No Solution";
return 0;
}
}
int sum=0;
int count=0;
for(int i=0;i<k+1;i++)
{
sum+=dist[i];
if(sum==n)
{
count++;
sum=0;
}
else if(sum>n)
{
count++;
sum=dist[i];
}
}
cout<<count;
}