汽车加油问题

【问题描述】

一辆汽车加满油后可以行驶N千米。旅途中有若干个加油站。若要使沿途的加油次数最少,设计一个有效的算法,指出应在那些加油站停靠加油。并证明你的算法能产生一个最优解。

【输入形式】

第一行有2个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。

【输出形式】

第一行输出编程计算出的最少加油次数,第二行输出汽车会在哪几个加油站加油,如果无法到达目的地,则输出”NoSolution”

【样例输入】

4 5
2 3 1 2 2 3

【样例输出】

3
1 3 5

c++代码

#include<iostream>
using namespace std;
int main()
{
    int n,k;
    int a[100];
    int b[100];
    cin>>n>>k;
    int num=0,s=n;
    for(int i=0;i<=k;i++)
    {
         cin>>a[i];
    }
    for(int i=0;i<=k;i++)
    {
        if(a[i]>n)
         {
             cout<<"No Solution";
             return 0;
         }
         if(s-a[i]>=0)
         {
             s-=a[i];
         }
         else
         {
             num++;
             s=n-a[i];
             b[num]=i;
         }
    }
    cout<<num<<endl;
    for(int i=1;i<=num;i++)
    {
    	cout<<b[i]<<" ";
	}
    return 0;
}
全部评论

相关推荐

吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
03-24 17:45
门头沟学院 C++
一个头三个大:我也是这样,状态持续了十天然后今天上午流程结束了,应该是横向对比挂了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务