洛谷 P1434 滑雪

2021-08-28 21:08:07 字數 1652 閱讀 5290

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(從24開始,在1結束)。當然25-24-23―┅―3―2―1更長。事實上,這是最長的一條。

輸入格式:

輸入的第一行為表示區域的二維陣列的行數r和列數c(1≤r,c≤100)。下面是r行,每行有c個數,代表高度(兩個數字之間用1個空格間隔)。

輸出格式:

輸出區域中最長滑坡的長度。

很明顯,這題用動態規劃是比較難做的,所以我們可以考慮dfs,對每個點都搜出它可以經過的最大高度,然後求出每個點的最大值。於是就有了**:

#includeusing namespace std;

#define mmax 0x3f3f3f

#define maxrc 100 + 5

const int dir[4][2] = , , , };

int mmap[maxrc][maxrc];

int dp[maxrc][maxrc];

int r, c;

bool check(int x, int y)

int dfs(int x, int y) }

if(!dp[x][y]) dp[x][y] = 1;

return dp[x][y];

}int main(void) }

dp[1][1] = 1;

int tmp = -mmax;

for(int i = 1; i <= r; i++) }

printf("%d\n", tmp);

return 0;

}

然後你就得了90分~。所以我們需要記憶化搜尋:

#includeusing namespace std;

#define mmax 0x3f3f3f

#define maxrc 100 + 5

const int dir[4][2] = , , , };

int mmap[maxrc][maxrc];

int dp[maxrc][maxrc];

int r, c;

bool check(int x, int y)

int dfs(int x, int y) }

if(!dp[x][y]) dp[x][y] = 1;

return dp[x][y];

}int main(void) }

dp[1][1] = 1;

int tmp = -mmax;

for(int i = 1; i <= r; i++) }

printf("%d\n", tmp);

return 0;

}

美滋滋~

洛谷 P1434 滑雪

題目描述 michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 1...

洛谷 p1434 滑雪

洛谷 p1434 滑雪 1.附上70分 include include int a 100 10 100 10 int vis 100 10 100 10 int r,c int next 2 上 下 左 右 int max 0 void dfs int step,int r1,int c1 int...

洛谷P1434滑雪

題目描述 michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 1...