poj1661Help Jimmy 記憶化搜尋

2021-07-09 01:42:28 字數 1316 閱讀 1624

這是找的倒數第二簡單的,然而依舊不會,淚~ 昨天晚上調出來發現是(以示例為例)從倒數第二個平台直接跳下去 時間是0;從上面第乙個跳下去 時間依舊是0  orz  12點半躺床上頓悟應該每個平台的時間不僅是乙個,有左右兩個時間 (唯一值得欣慰是發現了:dp值裡面不用加上高度下落的時間差,最後dp+下落的高度,總共加一次就好,畢竟下落一定需要時間,又不能往上跳,那麼總的下落時間是一定的,只需要考慮左右走的時間即可)

今天早上又糾結了一上午:對於乙個平台,當然要麼向左走,跳下去;要麼向右走,跳下去。但是對於下面的平台,可能由上不止乙個平台掉下來,那麼位置就不同導致數值不同。凌亂ing ㄟ( ▔, ▔ )ㄏ 自己也有想到某平台上的某點到達左右邊界的時間可以遞迴求出,無疑題解中的演算法更好:dp陣列只表示此平台的「左右端點」下落到地面的時間,很好的解決了上述問題

最後一合計 8+13>2+17 所以輸出23

/*******

poj1661

2015.12.18

172k 0ms c++ 1625b

*******/

#include #include#include#includeusing namespace std;

#define inf 1000000

struct platform

p[1010]; // 注意陣列大小,要不會wa

int leftmin[1010];

int rightmin[1010];

int n,max;

bool cmp(platform a,platform b)

int mintime(int l,int flag)

if( i<=n )

else

ltime = y - p[i].h + x - p[i].lx;

rtime = y - p[i].h - x + p[i].rx;

if( leftmin[i] == -1 )

leftmin[i] = mintime(i,1);

if( rightmin[i] == -1 )

rightmin[i] = mintime(i,0);

ltime += leftmin[i];

rtime += rightmin[i];

if( ltime < rtime ) //判斷左邊時間和右邊時間

else

}int main()

return 0;

}

poj1661 Help Jimmy dp動態規劃

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

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...