poj 1008 滑雪
来源:互联网 发布:windows 磁贴 编辑:程序博客网 时间:2024/05/22 02:13
开始时认为只要深度收索就行,没想到超时了,后来进行改进,一个点深度收索后就保留记录,下次收索时,如果该点已经收索过的话,就直接用保留的结果了。
#include<iostream>#include<fstream>using namespace std;int m[100][100];int u[100][100];int r,c;bool isIn(int i,int j){ if(i>=0&&i<r&&j>=0&&j<c) return true; else return false;}int dfs(int i,int j,int len){ int len2=len; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; for(int k=0;k<4;++k){ if(isIn(i+dir[k][0],j+dir[k][1])){ if(m[i+dir[k][0]][j+dir[k][1]]>m[i][j]){ if(u[i+dir[k][0]][j+dir[k][1]]>0){ if(len+u[i+dir[k][0]][j+dir[k][1]]>len2) len2=len+u[i+dir[k][0]][j+dir[k][1]]; }else{ int nextlen=dfs(i+dir[k][0],j+dir[k][1],1); if(len+nextlen>len2) len2=len+nextlen; } } } } u[i][j]=len2; return len2;}int main(){ //ifstream cin("2.txt"); cin>>r>>c; for(int i=0;i<r;++i) for(int j=0;j<c;++j) cin>>m[i][j]; int maxlen=0; for(int i=0;i<r;++i) for(int j=0;j<c;++j){ int len=dfs(i,j,1); if(len>maxlen) maxlen=len; } cout<<maxlen<<endl; return 0;}
0 0
- poj 1008 滑雪
- POJ 1008 滑雪
- POJ 滑雪
- poj 滑雪
- 滑雪 POJ
- 滑雪 POJ
- 滑雪 POJ
- 滑雪 POJ
- 滑雪 POJ
- POJ 1088 滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪
- Poj 1088 滑雪
- poj 1088 滑雪
- 滑雪--POJ--1088
- poj 1088 滑雪(DP)
- POJ 1088 滑雪
- POJ 1088 滑雪
- Python debuggers
- 快速排序
- Eclipse保存Android调试日志
- XML存放特殊字符
- 算法训练 逆序对
- poj 1008 滑雪
- CATransition 两个UIViewController 之间的跳转动画
- 算法训练 操作格子
- POJ2411 轮廓线动态规划典型例题
- Xcode 调试方法(5种方法)
- struts的核心类
- JSP编译指令和JSP动作指令
- Hbase学习笔记
- C++ 关联容器总结