POJ 1088
思路:記憶化搜索 + DP
#include<iostream> #include<cstdio> #include<cstring> #define MAX 105 using namespace std; const int dir[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1}; int map[MAX][MAX], vis[MAX][MAX], h[MAX][MAX]; void dfs(int x, int y){for(int i = 0;i < 4;i ++){int xx = x + dir[i][0];int yy = y + dir[i][1];if(map[xx][yy] != -1 && map[x][y] > map[xx][yy]){if(!vis[xx][yy]){dfs(xx, yy);h[x][y] = max(h[x][y], h[xx][yy] + 1);vis[x][y] = 1;}else{h[x][y] = max(h[xx][yy] + 1, h[x][y]);continue;}}} } int main(){int R, C, ans;freopen("in.c", "r", stdin);while(cin >> R >> C){memset(map, -1, sizeof(map));memset(vis, 0, sizeof(vis));for(int i = 1; i<= R;i ++){for(int j = 0;j <= C;j ++)h[i][j] = 1;}ans = -1;for(int i = 1;i <= R;i ++)for(int j = 1;j <= C;j ++)cin >> map[i][j];for(int i = 1;i <= R;i ++){for(int j = 1;j <= C;j ++){if(!vis[i][j])dfs(i, j);}}for(int i = 1;i <= R;i ++){for(int j = 1;j <= C;j ++)ans = max(h[i][j], ans);}cout << ans << endl;}return 0; }
轉載于:https://www.cnblogs.com/wangzhili/p/3950300.html
總結
- 上一篇: windows下git命令的使用
- 下一篇: SDUTOJ 【1166】打印直角三角