NBUT[1026]: 汽車加油問題
阿新 • • 發佈:2018-11-30
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; }