意思就是把所有點存下來,按照高度排個序, 然後從小到大列舉,然後判斷當前的點的四個方向有沒有存在經過當前點更優的情況,並且那個點的高度比當前點的高度要高如果存在就更新,因為根據大小排了序,所以不會出現不會出現乙個點重複統計的情況那麼複雜度是o(
n2)
#include
#include
#include
using namespace std;
const int maxn = 100;
intsum[maxn+10][maxn+10];
int dp[maxn+10][maxn+10], cnt;
pair pi[maxn*maxn+10];
bool cmp(pair a, pair b)
int main()
int x, y;
sort(pi, pi+cnt, cmp);
for(int i=0;iif(sum[x][y] < sum[x-1][y])
dp[x-1][y] = max(dp[x-1][y], dp[x][y]+1);
if(sum[x][y] < sum[x+1][y])
dp[x+1][y] = max(dp[x+1][y], dp[x][y]+1);
if(sum[x][y] < sum[x][y-1])
dp[x][y-1] = max(dp[x][y-1], dp[x][y]+1);
if(sum[x][y] < sum[x][y+1])
dp[x][y+1] = max(dp[x][y+1], dp[x][y]+1);
}int ans = 0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans = max(ans, dp[i][j]);
printf("%d\n", ans+1);
return
0;}
動態規劃 POJ1088 滑雪問題
description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 ...
POJ1088 動態規劃
題目鏈結 這個題目和最長子序列什麼的極為相似。不過之前都是一維,現在變成二維的了。僅此而已。因此我們可以想辦法把它先變成一維的。struct nodea 100 100 5 然後我們可以根據height排序,從最高點開始考慮,有點貪心的意思。和單源最短路徑dijkstra相似。int ma 100 ...
POJ 1088 動態規劃
今天晚上自習學習演算法,這裡就溫故知新寫一篇動歸的部落格 本題題目為漢語,此處就不翻譯了 解題思路 本題按照題意可以很容易的看出這是一道典型的動態規劃的題目。無非就是求出每個點周圍可以達到最大長度的點,依次繼續。本題目比較適合遞迴來進行動態規劃。動態規劃方程 f i j max 1 其中f i j ...