儲油點問題
一輛重型卡車預穿過長度1000公里的沙漠,卡車耗油為1公升/公里,卡車總載油能力為500公升。顯然卡車裝一次油是過不了沙漠的,因此司機必須設法在沿途建立幾個儲油點,使卡車能順利穿越沙漠,試問司機如何建立這些儲油點?每乙個儲油點應存多少汽油,才能使卡車以消耗最少汽油的代價通過沙漠?請通過列印儲油點的序號,各儲油點距離沙漠始點的距離以及儲油點的儲油量。
解題思路:
如果從頭向後遍歷的話,用dp不可行,因為沒有說明其單位長度,而且dp的複雜度過高,所以從後向前考慮。在最優條件下,應該是卡車在前500公尺用光所有的油,然後在500公尺處灌滿500l,再跑完剩下的500公尺,這樣保證了最後消耗最少的汽油通過沙漠。
所以目前明確在500公尺處要建乙個500公升的儲油點。假設這個儲油點左邊x公里有乙個儲油量無限大的儲油點,從此儲油點不斷搬運,使得這個500公尺處的儲油點具有500l。那麼以最優條件下,需要向儲油點灌兩次油。第一次:灌500-2x公升的油(因為灌完要回來);第二次:灌500-x公升的油(灌滿就不用管了),求得x=500/3。
可知跑的這兩次一共灌了1000公升油(灌滿油箱兩次),所以在500+500/3的位置需要修建1000l的儲油點。以此向前遞推,直到到達起始點。
**
#include
#define side 10
int main()
; int gas[10] = ;
while(dis[index-1] <= 500)
index -=2;
int i;
for(i = index;i >= 1;i--)
printf("no.%d distance:%side.5f gas:%sided\n",index-i+1,500-dis[i],gas[i]);
return
0;}
最近點問題
求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2 ...
支配點問題
支配數 陣列中某個元素出現的次數大於陣列總數的一半時就成為支配數,其所在位序成為支配點 比如int a 3為支配數,0,1,4分別為支配點 要求 返回任何乙個支配點 1 li 3,3,1,2,3 2 defmain 3 mid len li 2 4 for l inli 5 count 0 6 i ...
最近點對問題
在n n 1 個點的集合中尋找最近點對。即求任意兩點的歐幾里得距離的最小值。1 最簡單的暴力搜尋演算法,時間複雜對為o n n 2 這裡主要考慮分治演算法,執行時間的遞迴式為t n 2 t n 2 o n 時間複雜度為o n lgn 演算法思想 將集合中的點按x座標排序,我們可以想象一條垂直的直線將...