1. 程式人生 > >poj 1088 滑雪問題

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