**:
題目大意:
給你乙個矩陣,當做滑雪場,矩陣的每個單元中的數代表高度,滑雪者只能從高的滑到低的地方,且方向只能是上,下,左和右,問滑雪者最長能滑幾個單元?
解題思路:
該題本質上就是求矩陣上的最長嚴格連續遞減(或遞增)序列,即序列中的元素不能相等,而且前後之間必須相鄰。該題屬於動態規劃問題,要用到遞迴。
已找遞減序列為例,設dp[i][j]表示第i,j點所構成的序列有多長,求這個值,只需要對其上,下,左和右四個方向進行比較就可以,設board表示題目給的矩陣,dfs( i , j )表示求第i,j個點構成的序列長度,則可以得到
若board[i][j] > board[i-1][j], 則dp[i][j] = dp[i-1][j] + 1, 而dp[i-1][j]可以用遞迴求出,則狀態轉移方程為:
dp[i][j] = dfs( i-1 , j ) + 1;
但是還不夠,要對board[i][j]四個方向都計算一遍,取最大的,所以使用
int dx[4] = ;
int dy[4] = ;
然後進行一次迴圈,取出最大的值賦給dp[i][j],所以最終的狀態轉移方程為:
temp = max( temp, dfs( i + dx[k], j + dy[k] ) + 1 );
**:cpp**
#include
#include
#include
#include
using
namespace std;
int dp[105][105], board[105][105];
int dfs( int i, int j );
int main()
} int ans = 0;
for( int i = 1; i <= m; i++ )
} cout
<
} return 0;
} int dx[4] = ;
int dy[4] = ;
int dfs( int i, int j )
return (dp[i][j] = temp);
}
用動態規劃方法去解決最長回文問題(python)
首先把 貼上來鎮樓,然後慢慢講這個思路。從下面得到的思路,動態規劃的問題最主要的就是轉移方程與狀態方程的建立。思考 當字串從i到j處是回文,那麼從i 1 到j 1處也一定是回文,就這樣一直回溯 直到i j 設定為1,換成我自己的狀態方程就是當x y時,target i,j 1,其他的時候為0 然後轉...
動態規劃解決北大 ACM 1088 滑雪問題
poj1088 以前一直想搞acm,但一直沒怎麼動,沒技術苦逼研究僧還是找不到工作,所以決心搞acm,小夥伴們和我一起來學習吧。動態規劃第一題 北大acm 1088滑雪問題 問題描述 滑雪 time limit 1000ms memory limit 65536k total submissions...
動態規劃 POJ1088 滑雪問題
description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 ...