标签:sizeof php number others out otto att for test
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078
题目大意:在一个N*N的网格中每个网格都有一些奶酪,小明从(0,0)出发拿奶酪吃。但是小明只能往比当前网格中奶酪量多的网格走,并且小明一次最多可以一下子走k不。问小明能拿到多少奶酪吃?
解题思路:简单记忆化搜索一下就行。访问到一个网格, 如果该网格已经搜过,就直接返回记录的值。
代码:
1 const int inf = 0x3f3f3f3f;
2 const int maxn = 1e2 + 5;
3 int n, m;
4 int dp[maxn][maxn];
5 int maze[maxn][maxn];
6
7
8 int dfs(int si, int sj){
9 if(dp[si][sj]) return dp[si][sj];
10 int ans = maze[si][sj], tmans = 0;
11 for(int i = 1; i <= m; i++){
12 int u = si + i;
13 if(u < n && maze[u][sj] > maze[si][sj]){
14 tmans = max(tmans, dfs(u, sj));
15 }
16 u = si - i;
17 if(u >= 0 && maze[u][sj] > maze[si][sj]){
18 tmans = max(tmans, dfs(u, sj));
19 }
20 u = sj + i;
21 if(u < n && maze[si][u] > maze[si][sj]){
22 tmans = max(tmans, dfs(si, u));
23 }
24 u = sj - i;
25 if(u >= 0 && maze[si][u] > maze[si][sj]){
26 tmans = max(tmans, dfs(si, u));
27 }
28 }
29 return dp[si][sj] = ans + tmans;
30 }
31 int main(){
32 while(scanf("%d %d", &n, &m) && n != -1){
33 memset(dp, 0, sizeof(dp));
34 for(int i = 0; i < n; i++){
35 for(int j = 0; j < n; j++){
36 scanf("%d", &maze[i][j]);
37 }
38 }
39 int ans = dfs(0, 0);
40 printf("%d\n", ans);
41 }
42 }
题目:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11053 Accepted Submission(s): 4693
HDU 1078 FatMouse and Cheese 简单记忆化搜索
标签:sizeof php number others out otto att for test
原文地址:http://www.cnblogs.com/bolderic/p/7381961.html