Help Jimmy(遞迴)

2022-08-05 13:33:21 字數 1619 閱讀 4434

問題描述

"help jimmy" 是在下圖所示的場景上完成的遊戲:

場景中包括多個長度和高度各不相同的平臺。地面是最低的平臺,高度為零,長度無限。

jimmy 老鼠在時刻0 從高於所有平臺的某處開始下落,它的下落速度始終為1 米/秒。

當jimmy 落到某個平臺上時,遊戲者選擇讓它向左還是向右跑,它跑動的速度也是1 米/秒。

當jimmy 跑到平臺的邊緣時,開始繼續下落。jimmy 每次下落的高度不能超過max 米,不

然就會摔死,遊戲也會結束。

設計一個程式,計算jimmy 到地面時可能的最早時間。

輸入資料

第一行是測試資料的組數 t(0 <= t <= 20)。每組測試資料的第一行是四個整數n,x,

y,max,用空格分隔。n 是平臺的數目(不包括地面),x 和y 是jimmy 開始下落的位置

的橫豎座標,max 是一次下落的最大高度。接下來的n 行每行描述一個平臺,包括三個整

數,x1[i],x2[i]和h[i]。h[i]表示平臺的高度,x1[i]和x2[i]表示平臺左右端點的橫座標。1

<= n <= 1000,-20000 <= x, x1[i], x2[i] <= 20000,0 < h[i] < y <= 20000(i = 1..n)。所有坐

標的單位都是米。

jimmy 的大小和平臺的厚度均忽略不計。如果jimmy 恰好落在某個平臺的邊緣,被視

為落在平臺上。所有的平臺均不重疊或相連。測試資料保jimmy 一定能安全到達地面。

輸出要求

對輸入的每組測試資料,輸出一個整數,jimmy 到地面時可能的最早時間。

輸入樣例

3 8 17 20

0 10 8

0 10 13

4 14 3

輸出樣例

思路:用一棵樹形儲存每一個平臺,然後遞迴求解

#include #include struct line

;line *line;

int cmp(const void * a,const void * b)

else }

void tree(line * lp,int i,int n,int max)

else{}

}else

}//for

} }else }

int min(int a,int b)

if(lp==null)

return 10000000;

return min(x-lp->x1+cal(lp->left,lp->x1),lp->x2-x+cal(lp->right,lp->x2));

}int main()

//read items

line[n].h=0;

line[n].x1=0;

line[n].x2=200000000;

qsort(line,n+1,sizeof(line),cmp);//sort items by hight

tree(line,0,n+1,max);

res=y+cal(line,x);

/*for(int i=0;i*/

printf("%d\n",res);

delete line;

}}

Help Jimmy DP

help jimmy 是在下圖所示的場景上完成的遊戲。 場景中包括多個長度和高度各不相同的平臺。地面是最低的平臺,高度為零,長度無限。 jimmy老鼠在時刻0從高於所有平臺的某處開始下落,它的下落速度始終為1米 秒。當jimmy落到某個平臺上時,遊戲者選擇讓它向左還是向右跑,它跑動的速度也是1米 秒...

Help Jimmy POJ 1661

原題連結 考察 線性dp 錯誤思路 f x y 代表座標 x y 的最少時間 狀態轉移方程推不出來 而且完全沒有用到木板 正確思路 上面的狀態表示其實比較接近 dp問題要將大問題分解為若干個小問題 將起始點看作一塊木板 f i 0 表示從左邊跳下去的最短時間 f i 1 表示從右邊跳下去的最短時間 ...

poj 1661Help Jimmy

help jimmy time limit 1000ms memory limit 10000k total submissions 754...