1. 程式人生 > >NBUT[1026]: 汽車加油問題

NBUT[1026]: 汽車加油問題

https://ac.2333.moe/Problem/view.xhtml?id=1026

  • 問題描述
  • 一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計一個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明演算法能產生一個最優解。
    對於給定的n和k個加油站位置,計算最少加油次數。

  • 輸入
  • 本題有多組輸入資料,直到EOF結束。
    對於每組輸入資料的第一行有2 個正整數n和k(n≤5000,k≤1000),表示汽車加滿油後可行駛n公里,且旅途中有k個加油站。接下來的1 行中,有k+1 個整數,表示第k個加油站與第k-1 個加油站之間的距離。第0 個加油站表示出發地,汽車已加滿油。第k+1 個加油站表示目的地。

  • 輸出
  • 將計算出的最少加油次數輸出。如果無法到達目的地,則輸出“No Solution!”。

  • 樣例輸入
  • 7 7
    1 2 3 4 5 1 6 6
    
  • 樣例輸出
  • 4
    

在油量可以到達下一個地方的時候就不用加油,否則就要加油。

當加了油也過不去的時候,就輸出No Solution!。

#include<stdio.h>
#define N 1020
int a[N];
int main()
{
	int n,k,i,ans,m,flag;
	while(scanf("%d%d",&k,&n)!=EOF)
	{
		for(i=0;i<=n;i++)
			scanf("%d",&a[i]);
		ans=0;
		m=k;
		flag=1;
		for(i=0;i<=n;i++)
		{	
			if(a[i]>k)
			{
				flag=0;
				break;
			}
			if(m-a[i]>=0)
			{
				m-=a[i];
				continue;
			}
			else
			{
				ans++;
				m=k-a[i];
			}	
		}
		if(flag==0)
			printf("No Solution!\n");
		else
			printf("%d\n",ans);
	}
	return 0;
}