日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 1088(滑雪)

發布時間:2024/4/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 1088(滑雪) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

題意

給一個R、C數字矩陣,每個點可以向上下左右且比自己小的方向移動,問最長移動距離

AC

  • dfs + 記憶
#include <iostream> #include <algorithm> #include <stdio.h> #include <vector> #include <map> #include <string.h> #include <cmath> #include <algorithm> #define N 100005 #define P pair<int,int> #define mk(a, b) make_pair(a, b) #define mem(a, b) memset(a, b, sizeof(a)) int inf = 0x3f3f3f3f; #define ll long long6 using namespace std; int r, c; int g[120][120]; int ans; int vis[120][120]; int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; bool judge(int x, int y) {if (x < 0 || x >= r || y < 0 || y >= c)return false;elsereturn true; } int dfs(int x, int y) {if (vis[x][y] >= 0) {return vis[x][y];}for (int i = 0; i < 4; ++i) {int nx, ny;nx = x + dx[i];ny = y + dy[i];if (!judge(nx, ny) || g[nx][ny] >= g[x][y]) continue;int temp = dfs(nx, ny) + 1;vis[x][y] = max(vis[x][y], temp);}if (vis[x][y] == -1) return vis[x][y] = 0;else return vis[x][y]; }int main(){while (cin >> r >> c) {for (int i = 0; i < r; ++i) {for (int j = 0; j < c; ++j) {cin >> g[i][j];}}ans = -1;mem(vis, -1);for (int i = 0; i < r; ++i) {for (int j = 0; j < c; ++j) {ans = max(ans, dfs(i, j) + 1);}}cout << ans << endl;}return 0; }

總結

以上是生活随笔為你收集整理的POJ 1088(滑雪)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。