POJ 1088 滑雪(记忆化dfs)
2016-03-08 19:18
344 查看
不用记忆化直接就超时了,感觉能用DP做?
#include<iostream> #include<cstdio> #include<set> #include<string> #include<string.h> #include<cstring> #include<vector> #include<map> #include<queue> #include<stack> #include<cctype> #include<algorithm> #include<sstream> #include<utility> #include<cmath> #include<functional> #define mt(a) memset(a,0,sizeof (a)) #define fl(a,b,c) fill(a,b,c) #define SWAP(a,b,t) (t=a,a=b,b=t) #define inf 1000000000+7 #define sp system("pause") using namespace std; typedef long long ll; int G[120][120]; int H[120][120]; int disx[4] = { 0, 0, 1, -1 }; int disy[4] = { 1, -1, 0, 0 }; int n, m; int dfs(int x, int y) { if (H[x][y] != 0)return H[x][y]; int maxx = 0, s = 0; for (int i = 0; i < 4; i++) { if (x + disx[i] >= 0 && x + disx[i] < n&&y + disy[i] >= 0 && y + disy[i] < m) { if (G[x][y]>G[x + disx[i]][y + disy[i]]) { s = dfs(x + disx[i], y + disy[i]); if (s>maxx)maxx = s; } } } H[x][y] = maxx+1; return H[x][y]; } int main() { cin >> n >> m; mt(G); mt(H); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d", &G[i][j]); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { H[i][j] = dfs(i, j); } } int maxx = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) maxx = max(maxx, H[i][j]); } printf("%d\n", maxx); sp; return 0; }
相关文章推荐
- 异常情况下Activity数据的保存和恢复
- 胡庆龙
- Android Bundle
- 作业2 个人项目-数组求和
- 就拿胖子说事
- 313. Super Ugly Number
- Redis应用场景
- ML2分层端口绑定技术在SDN开发中的应用(一)
- 通过JVM 参数 实现spring 应用的二进制代码与配置分离。
- 学期博客:学习进度条
- 作业2
- Codeforces 630N - Forecast
- 【HDU5638 BestCoder Round 74 (div1)C】【贪心 线段树or树套树or队列】Toposort n点m边删k边使得拓扑序最小
- docker 学习笔记3
- 项目--Firebug使用小结
- cd 切换当前目录至dirName
- ABAP 通过视图取数到内表函数
- BZOJ3052: [wc2013]糖果公园
- grep正则表达式
- 让CentOS能用yum自动安装rar和unrar