poj 1088 经典的记忆化搜索
来源:互联网 发布:centos png 编辑:程序博客网 时间:2024/05/29 19:00
这是一题非常经典的记忆化搜索题。
在这题的讨论里 ,有以为大牛说:A的题不在多 , 在于精 !!!
记忆化搜索:就是说 , 把每个搜索过的点的状态都记忆下来 , 等下次 , 如果再次搜索到这个点时 , 那么就可以不去搜索 ,直接调用这个被记忆的状态 。
代码:
在这题的讨论里 ,有以为大牛说:A的题不在多 , 在于精 !!!
记忆化搜索:就是说 , 把每个搜索过的点的状态都记忆下来 , 等下次 , 如果再次搜索到这个点时 , 那么就可以不去搜索 ,直接调用这个被记忆的状态 。
代码:
const int maxn = 200;int grap[maxn][maxn];int maxy[maxn][maxn] ;int r , c;int d_x[4] = {1 , 0 , -1, 0};int d_y[4] = {0 , -1 , 0 , 1};int dfs(int u , int v){ if(maxy[u][v]) returnmaxy[u][v]; // 如果被搜过 int g ,h; for(int i =3; i >= 0; i--) { g = u +d_x[i] , h = v + d_y[i]; if(g >= 0&& g < r && h >= 0 && h < c&& grap[u][v] > grap[g][h]) { int sum =dfs(g , h) + 1; if(sum >maxy[u][v]) maxy[u][v] = sum; } } returnmaxy[u][v];}int main(){ while(scanf("%d %d" , &r , &c) != EOF) { memset(maxy, 0 , sizeof(maxy)); int i ,j; for(i = 0 ;i < r; i++) for(j = 0 ;j < c; j++) scanf("%d" ,&grap[i][j]); int maxx =0; for(i = r-1;i >= 0; i--) for(j = c-1;j >= 0; j--) { if(!maxy[i][j]) // 如果这个点没被搜过 { dfs(i ,j); maxx =maxx>maxy[i][j]?maxx:maxy[i][j]; //cout<<maxx<<endl; } else if(maxx< maxy[i][j]) maxx =maxy[i][j]; // 如果这个点已经搜过 , 就直接调用 ,其被"记忆"的状态 } cout<<maxx+1<<endl; } return0;}
0 0
- poj 1088 经典的记忆化搜索
- POJ--1191[棋盘分割] 经典的记忆化搜索
- poj--1088--DFS(记忆化搜索之经典)
- POJ 1088: 滑雪(经典 DP+记忆化搜索)
- POJ-1088 记忆化搜索
- poj 1088(记忆化搜索)
- poj 1088 记忆化搜索
- poj 1088 记忆化搜索
- POJ 1088 记忆化搜索
- poj 1088 记忆化搜索
- 经典记忆化搜索
- POJ 1088 经典动态规划(记忆搜索)问题
- poj--1579--(DFS+记忆化搜索之经典)
- 【记忆化搜索】POJ
- poj 1088 滑雪 简单的记忆化搜索/dp
- poj 1088 滑雪 DP(dfs的记忆化搜索)
- POJ 1088 滑雪 记忆化搜索
- poj 1088 (dp记忆化搜索)
- poj2728最优比率生成树
- poj 2226
- poj1511(第一次用数组模拟邻接表…
- poj 1724
- 中位数的应用
- poj 1088 经典的记忆化搜索
- poj 2015 Permutation Code
- unipue() 函数的功能
- Distant Galaxy poj 3141
- 01背包和完全背包比较容易忽略的地…
- 动态规划求 最长递增子序列
- LA 4726 Average
- poj 1742
- 女眞關係