标签:
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1078
1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<string> 5 #include<algorithm> 6 using namespace std; 7 8 int map[105][105]; 9 int dp[105][105]; 10 int n, k; 11 int d[2][4] ={ -1, 1, 0, 0, 0, 0, -1, 1 }; 12 13 int dfs( int x, int y ){ 14 int ans = 0; 15 if( !dp[x][y] ){ 16 for( int i = 1; i <= k; i++ ) 17 for( int j = 0; j < 4; j++ ){ 18 int dx = x + d[0][j] * i; 19 int dy = y + d[1][j] * i; 20 if( dx < 0 || dx >= n || dy < 0 || dy >= n ) continue; 21 if( map[dx][dy] > map[x][y] ){ 22 ans = max( ans, dfs( dx, dy ) ); 23 } 24 } 25 dp[x][y] = ans + map[x][y]; 26 } 27 return dp[x][y]; 28 } 29 30 int main(){ 31 ios::sync_with_stdio( false ); 32 33 while( cin >> n >> k, ( n + 1 ) || ( k + 1 ) ){ 34 for( int i = 0; i < n; i++ ) 35 for( int j = 0; j < n; j++ ) 36 cin >> map[i][j]; 37 memset( dp, 0, sizeof( dp ) ); 38 cout << dfs( 0, 0 ) << endl; 39 } 40 41 return 0; 42 }
HDU-1078 FatMouse and Cheese ( 记忆化搜索 )
标签:
原文地址:http://www.cnblogs.com/hollowstory/p/5452188.html