help jimmy
description
"help jimmy" 是在下圖所示的場景上完成的遊戲。
場景中包括多個長度和高度各不相同的平台。地面是最低的平台,高度為零,長度無限。
jimmy老鼠在時刻0從高於所有平台的某處開始下落,它的下落速度始終為1公尺/秒。當jimmy落到某個平台上時,遊戲者選擇讓它向左還是向右跑,它跑動的速度也是1公尺/秒。當jimmy跑到平台的邊緣時,開始繼續下落。jimmy每次下落的高度不能超過max公尺,不然就會摔死,遊戲也會結束。
設計乙個程式,計算jimmy到底地面時可能的最早時間。
input
第一行是測試資料的組數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恰好落在某個平台的邊緣,被視為落在平台上。所有的平台均不重疊或相連。測試資料保證問題一定有解。
output
對輸入的每組測試資料,輸出乙個整數,jimmy到底地面時可能的最早時間。
sample input
1sample output3 8 17 20
0 10 8
0 10 13
4 14 3
23解題思路一開始想用dfs,發現2的1000次方實在太大,想了半天看題解說是dp
乙個平台上後有兩種選擇,如果我們得到了以平台左邊為起點及以平台右邊為起點到地面的最短時間,那麼選擇往左走還是往右走就很容易了。這樣,原問題就分解為兩個子問題這兩個子問題
用dp[i][0]表示以i號平台左邊為起點到地面的最短時間,dp[i][1]]表示以i號平台右邊為起點到地面的最短時間,那麼
dp[i][0] = h[i] - h[k] + min (dp[k][0] + x1[i] - x1[k], dp[k][1] + x2[k] - x1[i]);
dp[i][1] = h[i] - h[k] + min (dp[k][0] + x2[i] - x1[k], dp[k][1] + x2[k] - x2[i]);
狀態轉移方程有了,再就是初始化的問題了。
dp陣列初始化為0
根據題目所述,初始位置一定高於所有板子
**
#include #include #include #include #include #include #define inf 0x3f3f3f3f
using namespace std;
struct plate
p[1010];
int maxn ,dp[1010][2],n;
int cmp(const plate &p1,const plate &p2)
else k--;
}//這個板子左下面沒有板子,那麼看他與地面的距離
if(p[i].h-p[k].h > maxn) //如果與地面的距離太大
dp[i][0]=inf;
else //如果可以直接跳到地上
dp[i][0]=p[i].h;
}void righttime(int i)
else k--;
}if(p[i].h-p[k].h>maxn)
dp[i][1]=inf;
else //如果可以直接跳到地上
dp[i][1]=p[i].h;
}int shorttime()
return min(dp[n+1][0],dp[n+1][1]);
}int main()
return 0;
}
POJ1661Help Jimmy(動態規劃)
description help jimmy 是在下圖所示的場景上完成的遊戲。場景中包括多個長度和高度各不相同的平台。地面是最低的平台,高度為零,長度無限。jimmy老鼠在時刻0從高於所有平台的某處開始下落,它的下落速度始終為1公尺 秒。當jimmy落到某個平台上時,遊戲者選擇讓它向左還是向右跑,它...
poj 1661 Help Jimmy 動態規劃
題意 給n個用左端點 右端點 高度標識的平台,問乙個下落速度,移動速度均為1的點下落到地面的最小時間,其中每次下落距離不能超過輸入值max.分析 動態規劃ldp i 表示從第i塊木板左邊下落到地面的最小時間,rdp i 表示從第i塊木板右邊下落到地面的最小時間。poj 1661 sep9 inclu...
poj 1661 Help Jimmy 動態規劃
poj 1661 help jimmy help jimmy time limit 1000ms memory limit 10000k total submissions 13143 accepted 4363 description help jimmy 是在下圖所示的場景上完成的遊戲。場景中包...