POJ 1088 滑雪 記憶化搜尋
Time Limit: 1000MS | Memory Limit: 65536K |
Total Submissions: 85082 | Accepted: 31876 |
Description
Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
一個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。
Input
Output
輸出最長區域的長度。Sample Input
5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
Sample Output
25
Source
SHTSC 2002
dp[i][j]表示長度,從i=1,j=1;開始搜尋如果四周有大於a[i][j]例如a[i-1][j]那麼遞迴求temp=max(a[i-1][j],dfs(i-1,j)
迴圈跟新每個點的高度最後迴圈求出dp[i][j]的最大值。
ACcode:
#pragma warning(disable:4786)//使命名長度不受限制 #pragma comment(linker, "/STACK:102400000,102400000")//手工開棧 #include <map> #include <set> #include <queue> #include <cmath> #include <stack> #include <cctype> #include <cstdio> #include <cstring> #include <stdlib.h> #include <iostream> #include <algorithm> #define rd(x) scanf("%d",&x) #define rd2(x,y) scanf("%d%d",&x,&y) #define rds(x) scanf("%s",x) #define rdc(x) scanf("%c",&x) #define ll long long int #define maxn 105 #define mod 1000000007 #define INF 0x3f3f3f3f //int 最大值 #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i) #define MT(x,i) memset(x,i,sizeof(x)) #define PI acos(-1.0) #define E exp(1) using namespace std; int a[maxn][maxn],dp[maxn][maxn],n,m; int dfs(int x,int y){ if(dp[x][y]!=0) return dp[x][y]; //if(x<1||x>n||y<1||y>m) // return 0; if(x==0 || x==n+1 || y==0 || y==m+1) return 0; int cnt=0; if(a[x-1][y]<a[x][y]) cnt=max(cnt,dfs(x-1,y)); if(a[x+1][y]<a[x][y]) cnt=max(cnt,dfs(x+1,y)); if(a[x][y-1]<a[x][y]) cnt=max(cnt,dfs(x,y-1)); if(a[x][y+1]<a[x][y]) cnt=max(cnt,dfs(x,y+1)); dp[x][y]=cnt+1; return cnt+1; } int main(){ while(rd2(n,m )!=EOF){ MT(dp,0); FOR(i,1,n) FOR(j,1,m) rd(a[i][j]); FOR(i,1,n) FOR(j,1,m) dfs(i,j); int maxxx=-1; FOR(i,1,n) FOR(j,1,m) maxxx=max(maxxx,dp[i][j]); printf("%d\n",maxxx); } return 0; } /* 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 */
相關推薦
POJ 1088 滑雪 記憶化搜尋
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 85082 Accepted: 31876 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得
POJ 1088 滑雪(記憶化搜尋)
如果我們一個一個點去搜的話,肯定會超時,因為有些點會被重複搜尋,這樣就很浪費時間,所以我們需要用dp來標記一下,因此dp就用來標記當前點的最長距離,如果搜尋到的點的dp已經有值了,
poj 1088 滑雪 記憶化搜尋
程式碼: #include <iostream> #include <cstdio> #include <cstring> using namespace st
POJ 1088 滑雪(記憶化搜尋+DFS)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 83489 Accepted: 31234 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了
POJ 1088滑雪(記憶化搜尋)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 69948 Accepted: 25796 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度
poj 1088 滑雪 (記憶化搜尋)
滑雪 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每
poj 1088 dp記憶化搜尋狀態( or dfs)
這道滑雪的題當時陳月航他們來講過的,但是忘完了,就只記得這道題是dp+記憶化搜尋 這道題我先用dp遞迴的方式搜出來結果,感覺有點像搜尋的樣子,但是提交上去直接超時 然後我就想到了貌似要用記憶化搜尋,坑了很多次,中間忽略了兩個地方(在程式碼中指出) 其實這道dp和迷宮
洛谷P1434 [SHOI2002]滑雪 記憶化搜尋
注意:本題求的是最長的滑坡長度,而不是高度 用ans[x][y]表示從(x,y)這一點開始的最長滑坡 那麼只要上下左右四個方向的高度比這一點的高度小,ans[x][y]就等於ans[x-1][y]或ans[x+1][y]或ans[x][y+1]或ans[x][y-1]加一,再從這幾個值裡選擇一個最大的就行
poj 1088 滑雪 深度優先搜尋
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 107901 Accepted: 41084 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪
滑雪 POJ - 1088 (記憶化搜尋/動態規劃)
傳送門 題意:找出一條降序的路徑,使得這條路徑最長,輸出長度即可。 題解:對於每個點都進行dfs,dfs的同時進行記憶化搜尋即可。 附上程式碼: #include<iostream> #include<cstdio> using namespace std
poj 1088 滑雪 動態規劃(記憶化搜尋)
ichael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子 1 2
poj 1088 滑雪(動態規劃:記憶化搜尋)
這個題開始想著用動態規劃遞推來做的 但是根本不知從哪裡下手 想了下還是記憶化更方便 我的方法是先把邊界設定為無窮大 每次dfs知道當前點周圍沒有比它還低的位置即可 0ms程式碼如下: #include
POJ 1088 滑雪 (記憶化搜尋)
滑雪 Time Limit:1000MS Memory Lim
POJ 1088 滑雪(記憶化搜尋)
Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個
poj 1088 滑雪[zz] 記憶化搜尋
題意:給出一些高度,從一個位置劃只能往周圍四個方向滑,且高度遞減。。求最長的滑行區域。 這道題應該是用DP做,但是沒咋搞過DP所以也木有什麼想法。。 在網上看可以用記憶化搜尋做,記憶化搜尋 = 搜尋方式 + DP思想 ,大概的意思就是把已經搜過的節點狀態儲存起來,避免重
POJ 1088: 滑雪(經典 DP+記憶化搜索)
esp roman ted font eof 個人 algorithm set str 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74996
POJ 1088 滑雪 (記憶化、動態規劃、排序優化)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 108063 Accepted: 41157 Description Michael喜歡滑雪百這並不奇怪, 因為
POJ 1088 滑雪 (搜尋)
Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子
poj 1198 / hdu 1401 Solitaire (記憶化搜尋+meet in middle)
題目大意:給你一個8*8的棋盤,上面有四個棋子,給你一個初始排布,一個目標排布,每次移動,可以把一個棋子移動到一個相鄰的空位,或者跨過1個相鄰的棋子,在保證棋子移動不超過8次的情況下,問能否把棋盤上的棋子由初始排布變成目標排布 8*8的棋盤,剛好不爆ull,狀壓那些位置有棋子 然後從初始狀態開始,暴搜出當
滑雪 【記憶化搜尋】
滑雪 Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下