poj 1088 滑雪問題
題目大意:中文。。不解釋
解題思路:動態規劃,這裡要求從一個點往上下左右移動,要滿足高度差,
我們可以把每個位置記錄儲存好,按照高度,從小到大排列,然後利用動態規劃往一個高度增長的方向就可以處理,轉換為類似於最長遞增子序列問題
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct node { int x, y, h; }; const int maxn = 101; int dp[maxn][maxn], maritx[maxn][maxn]; node height[maxn * maxn]; int r, c; inline bool cmp(const node &a, const node &b) { return a.h < b.h; }; int main() { scanf("%d %d", &r, &c); memset(dp, 0, sizeof(dp)); int index = 0; for(int i = 1; i <= r; i++) { for(int j = 1; j <= c; j++) { scanf("%d", &maritx[i][j]); height[index].x = i; height[index].y = j; height[index++].h = maritx[i][j]; } } sort(height, height + index, cmp); int result = 0; for(int i = 0; i < index; i++) { int x = height[i].x, y = height[i].y; if(maritx[x][y] < maritx[x][y + 1] && dp[x][y] >= dp[x][y + 1]) dp[x][y + 1] = dp[x][y] + 1; if(maritx[x][y] < maritx[x + 1][y] && dp[x][y] >= dp[x + 1][y]) dp[x + 1][y] = dp[x][y] + 1; if(maritx[x][y] < maritx[x][y - 1] && dp[x][y] >= dp[x][y - 1]) dp[x][y - 1] = dp[x][y] + 1; if(maritx[x][y] < maritx[x - 1][y] && dp[x][y] >= dp[x - 1][y]) dp[x - 1][y] = dp[x][y] + 1; } for(int i = 1; i <= r; i++) { for(int j = 1; j <= c; j++) result = max(result, dp[i][j]); } printf("%d\n", result + 1); return 0; }
相關推薦
POJ 1088: 滑雪(經典 DP+記憶化搜索)
esp roman ted font eof 個人 algorithm set str 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74996
poj - 1088 - 滑雪(dp)
target art dsm 題目 ipp 每次 元素 org mod 題意:一個R * C的矩陣(1 <= R,C <= 100),元素代表該點的高度h(0<=h<=10000),從隨意點出發,每次僅僅能走上、下、左、右。且將要到的高度要比
poj 1088 滑雪
body 長度 bsp sam 高度 memory put -1 output 滑雪 Time Limit: 1000MS Memory Limit: 65536K
Poj 1088 滑雪 遞歸實現
遞歸實現 esp efi div size bsp != print 滑雪 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define
POJ 1088 滑雪 (搜尋)
Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子
poj 1088 滑雪 深度優先搜尋
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 107901 Accepted: 41084 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪
POJ 1088 滑雪 (記憶化、動態規劃、排序優化)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 108063 Accepted: 41157 Description Michael喜歡滑雪百這並不奇怪, 因為
poj 1088 滑雪問題
題目大意:中文。。不解釋 解題思路:動態規劃,這裡要求從一個點往上下左右移動,要滿足高度差, 我們可以把每個位置記錄儲存好,按照高度,從小到大排列,然後利用動態規劃往一個高度增長的方向就可以處理,轉換為類似於最長遞增子序列問題 #include <iostream&g
POJ 1088 滑雪 記憶化搜尋
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 85082 Accepted: 31876 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得
poj(1088)——滑雪(經典遞推型動歸)
題意: 中文題,就是在所有的點中找一個點作為起點,然後叫你找出從起點開始的最長路徑是多少。 這裡高度必須嚴格遞減。 思路: 一開始我碰到這題時,沒有思路,是看題解寫的。 但是今天我回頭再去看時,發現自己能夠獨立寫出來了,而且和上次的方法不一樣。也許這就是進步吧! 其實就是一
poj 1088滑雪 (動態規劃)
滑雪Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 59524Accepted: 21672DescriptionMichael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向
POJ 1088 滑雪(動態規劃經典)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 63875 Accepted: 23387 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度
POJ 1088 滑雪(記憶化搜尋)
如果我們一個一個點去搜的話,肯定會超時,因為有些點會被重複搜尋,這樣就很浪費時間,所以我們需要用dp來標記一下,因此dp就用來標記當前點的最長距離,如果搜尋到的點的dp已經有值了,
(poj 1088 滑雪)
原題戳這裡 題解 一般的方法是記憶化搜尋。注意如果一個f[x][y]已經算過了,那麼直接返回就好了,相當於剪枝吧 另一種方法是非遞迴的。先按高度從小到大排序,由於這樣做依然可以保證包含最長的情況,因此是正確的,而且很快。 Code 非遞迴版 /
poj 1088 滑雪 動態規劃(記憶化搜尋)
ichael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子 1 2
poj 1088 滑雪問題http://poj.org/problem?id=1088
貪心+dp 自己沒寫出來 copy的 什麼鬼啊 唉 還得努力啊 #include <stdio.h> #include <string.h> #include <
poj 1088 滑雪-----DP 動態規劃
滑雪 Time Limit:1000MS Memory Limit:65536K Total Submissions:57209 Accepted:20771 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了
poj 1088 滑雪(動態規劃:記憶化搜尋)
這個題開始想著用動態規劃遞推來做的 但是根本不知從哪裡下手 想了下還是記憶化更方便 我的方法是先把邊界設定為無窮大 每次dfs知道當前點周圍沒有比它還低的位置即可 0ms程式碼如下: #include
[POJ](1088)滑雪 ---- 動態規劃
Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列
poj 1088 滑雪 記憶化搜尋
程式碼: #include <iostream> #include <cstdio> #include <cstring> using namespace st