POJ 1088 滑雪(動態規劃經典)
Time Limit: 1000MS | Memory Limit: 65536K |
Total Submissions: 63875 | Accepted: 23387 |
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
思路:該題是動態規劃的經典題目,要用到記憶化搜尋,深度優先遍歷。每次求出從每個點出發的最長路徑長度,全域性最優解包含區域性最優解。
AC程式碼:
#include<iostream> #include<cstring> using namespace std; int area[105][105]; //儲存每個點的高度 int len[105][105]; //儲存從每個點出發得到的最長路徑長度 int r,c; int max(int a,int b,int c,int d) { if(a<b) a=b; if(a<c) a=c; if(a<d) a=d; return a; } int longest(int i,int j,int height) { if(i<0||j<0||i>=r||j>=c||height<=area[i][j]) return 0; //遇到邊界或者該點的高度比前一個搜尋的點的高度大,則返回 if(len[i][j]>=0) return len[i][j]; //若len[i][j]>0,說明該點已經被搜尋過 len[i][j]=max(longest(i-1,j,area[i][j]),longest(i+1,j,area[i][j]),longest(i,j-1,area[i][j]),longest(i,j+1,area[i][j]))+1; return len[i][j]; } int main() { int i,j; memset(len,-1,sizeof(len)); //初始化len陣列 cin>>r>>c; for(i=0; i<r; i++) for(j=0; j<c; j++) cin>>area[i][j]; int max=0,l=0; for(i=0; i<r; i++) for(j=0; j<c; j++) { l=longest(i,j,area[i][j]+1); if(l>max) max=l; } cout<<max<<endl; return 0; }
相關推薦
POJ 1088 滑雪(動態規劃經典)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 63875 Accepted: 23387 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度
poj 1088滑雪 (動態規劃)
滑雪Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 59524Accepted: 21672DescriptionMichael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向
poj 1088 滑雪(動態規劃:記憶化搜尋)
這個題開始想著用動態規劃遞推來做的 但是根本不知從哪裡下手 想了下還是記憶化更方便 我的方法是先把邊界設定為無窮大 每次dfs知道當前點周圍沒有比它還低的位置即可 0ms程式碼如下: #include
POJ 1088 滑雪(動態規劃)(解題報告)
Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數
編輯距離(動態規劃經典)
1183 編輯距離 編輯距離,又稱Levenshtein距離(也叫做Edit Distance),是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字元替換成另一個字元
poj 1088 滑雪-----DP 動態規劃
滑雪 Time Limit:1000MS Memory Limit:65536K Total Submissions:57209 Accepted:20771 Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了
Leetcode 120. Triangle 三角形問題(動態規劃經典) 解題報告
1 解題報告 首先我承認我很二哈,這道題我明明已經做過了,但是剛剛不知道為什麼又去做了一遍,而且我查了下兩次的解法還有所差別(貌似是現在的版本有進步了呢) 問題就是一個三角形的陣列,求從頂部到下方的最短路徑。。 這個問題是太過經典+Easy的DP問題了,哈
POJ 1088 滑雪 (記憶化搜尋)
滑雪 Time Limit:1000MS Memory Lim
POJ 1088 滑雪(記憶化搜尋)
Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個
滑雪(動態規劃+dfs)
描述 Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長的滑坡。區域由一個
POJ 1088 滑雪 (記憶化、動態規劃、排序優化)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 108063 Accepted: 41157 Description Michael喜歡滑雪百這並不奇怪, 因為
POJ 1088: 滑雪(經典 DP+記憶化搜索)
esp roman ted font eof 個人 algorithm set str 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74996
poj(1088)——滑雪(經典遞推型動歸)
題意: 中文題,就是在所有的點中找一個點作為起點,然後叫你找出從起點開始的最長路徑是多少。 這裡高度必須嚴格遞減。 思路: 一開始我碰到這題時,沒有思路,是看題解寫的。 但是今天我回頭再去看時,發現自己能夠獨立寫出來了,而且和上次的方法不一樣。也許這就是進步吧! 其實就是一
poj - 1088 - 滑雪(dp)
target art dsm 題目 ipp 每次 元素 org mod 題意:一個R * C的矩陣(1 <= R,C <= 100),元素代表該點的高度h(0<=h<=10000),從隨意點出發,每次僅僅能走上、下、左、右。且將要到的高度要比
POJ 1088 滑雪 (搜尋)
Description Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子
POJ 3181 Dollar Dayz(動態規劃+大數)
題目傳送門 Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. During his first
合併石子(動態規劃經典題)
步驟: 1. 設狀態:f[i][j]表示從第i堆合併到第j堆,合併成一堆的最小得分 2. 初始狀態:f[i][i]=0; 最終狀態:f[1][n];//從第1堆合併到第n堆的最小得分 3.狀態轉移方程:f[i][j]=max(f[i][j],f[i][k]+f[k+
滑雪(動態規劃)
Description Michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子 1 2 3
數組中最長的升序子序列(動態規劃問題)
ace dia mic enc namespace 進行 strong main log The longest Increasing Subsequence (LIS) 給定一個序列,找到這個序列的一個最長的子序列,使得子序列的所有元素是升序的,且元素之間的相對位置不變
BZOJ4828 AHOI/HNOI2017大佬(動態規劃+bfs)
math sub pre per 級別 include name map esp 註意到懟大佬的操作至多只能進行兩次。我們逐步簡化問題。 首先令f[i][j]表示第i天結束後自信值為j時至多有多少天可以進行非防禦操作(即恢復自信值之外的操作)。這個dp非常顯然。由於