码迷,mamicode.com
首页 > 其他好文 > 详细

[HDOJ1078]FatMouse and Cheese(记忆化搜索)

时间:2016-05-05 17:24:01      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078

题意:给出n, k,然后给出n*n的地图,(下标0~n-1),有一只老鼠从(0,0)处出发,只能走直线,并且目标点的数值比当前点要大。每次最长可以走k步,问最长的一条链的数值和。

用一个二维数组dp(i,j)表示某一格出发的时候最长链的数值和,然后dfs。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19 
20 using namespace std;
21 
22 const int maxn = 111;
23 const int dx[4] = {0, 0, 1, -1};
24 const int dy[4] = {1, -1, 0, 0};
25 int n, k;
26 int G[maxn][maxn];
27 int dp[maxn][maxn];
28 
29 bool ok(int x, int y) {
30     return x >= 0 && y >= 0 && x < n && y < n;
31 }
32 
33 int dfs(int x, int y) {
34     if(dp[x][y]) return dp[x][y];
35     int cur = 0;
36     for(int i = 0; i < 4; i++) {
37         for(int j = 1; j <= k; j++) {
38             int xx = x + dx[i] * j;
39             int yy = y + dy[i] * j;
40             if(ok(xx, yy) && G[xx][yy] > G[x][y]) {
41                 cur = max(cur, dfs(xx, yy));
42             }
43         }
44     }
45     return dp[x][y] = cur + G[x][y];
46 }
47 
48 inline bool scan_d(int &num) {
49     char in;bool IsN=false;
50     in=getchar();
51     if(in==EOF) return false;
52     while(in!=-&&(in<0||in>9)) in=getchar();
53     if(in==-){ IsN=true;num=0;}
54     else num=in-0;
55     while(in=getchar(),in>=0&&in<=9){
56             num*=10,num+=in-0;
57     }
58     if(IsN) num=-num;
59     return true;
60 }
61 
62 int main() {
63     // freopen("in", "r", stdin);
64     while(~scanf("%d%d", &n, &k) && n + k != -2) {
65         memset(dp, 0, sizeof(dp));
66         for(int i = 0; i < n; i++) {
67             for(int j = 0; j < n; j++) {
68                 scan_d(G[i][j]);
69             }
70         }
71         printf("%d\n", dfs(0, 0));
72     }
73     return 0;
74 }

 

[HDOJ1078]FatMouse and Cheese(记忆化搜索)

标签:

原文地址:http://www.cnblogs.com/vincentX/p/5462473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!