NY---10---记忆化搜索
先直接上题目 ~
Ah... 有时候 我会纠结 为什么理解了一个算法的思想却写不出代码?
因为理解的不够深刻嘛?
关于记忆化搜索 因为有dp的状态转移思想在 我这边就不提了 目前 太渣了=-=
主要是因为 好久没更博客了 哎~
今天 和你打了通电话 无言
////////////////////////////////////
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 6 int n , m; 7 const int size = 110; 8 int skip[size][size]; 9 int cnt[size][size]; 10 int dir[4][2] = {1,0,-1,0,0,-1,0,1}; 11 12 int dfs( int x , int y ) 13 { 14 int mmax = 1; 15 if( cnt[x][y] ) 16 return cnt[x][y]; 17 for( int i = 0 ; i<4 ; i++ ) 18 { 19 int xx = x + dir[i][0]; 20 int yy = y + dir[i][1]; 21 if( xx>=0 && xx<n && yy>=0 && yy<m && skip[x][y]>skip[xx][yy] ) 22 { 23 if( cnt[xx][yy] ) 24 { 25 mmax = max( mmax , cnt[xx][yy]+1 ); 26 } 27 else 28 { 29 mmax = max( mmax , dfs( xx , yy ) + 1 ); 30 } 31 } 32 } 33 cnt[x][y] = mmax; 34 return cnt[x][y]; 35 } 36 37 int main() 38 { 39 int mmax; 40 while( cin >> n >> m ) 41 { 42 mmax = 0; 43 memset( cnt , 0 , sizeof(cnt) ); 44 for( int i = 0 ; i<n ; i++ ) 45 { 46 for( int j = 0 ; j<m ; j++ ) 47 { 48 cin >> skip[i][j]; 49 //cnt[i][j] = 0; 50 } 51 } 52 for( int i = 0 ; i<n ; i++ ) 53 { 54 for( int j = 0 ; j<m ; j++ ) 55 { 56 mmax = max( mmax , dfs(i,j) ); 57 } 58 } 59 cout << mmax << endl; 60 } 61 return 0; 62 }
today:
生命是华丽的错觉 时间被贼偷走一切
七岁的那一年抓住那只蝉 以为能抓住夏天
十七岁的那年吻过他的脸 就以为和她能永远
just follow your heart