标签:style http color io os ar for sp on
思路:先利用记忆化搜索预处理出每个结点对应8个方向最远能走多远,然后枚举拐点记录最大值即可
代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int d[8][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}, {-1, 1}, {1, 1}, {1, -1}, {-1, -1}}; const int N = 105; int n, sum[N][N][10]; char g[N][N]; int dfs(int x, int y, int dd) { if (x <= 0 || x > n || y <= 0 || y > n) return 0; if (sum[x][y][dd] != -1) return sum[x][y][dd]; if (g[x][y] == '#') return sum[x][y][dd] = 0; sum[x][y][dd] = dfs(x + d[dd][0], y + d[dd][1], dd) + 1; return sum[x][y][dd]; } int main() { while (~scanf("%d", &n) && n) { memset(sum, -1, sizeof(sum)); for (int i = 1; i <= n; i++) scanf("%s", g[i] + 1); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (g[i][j] == '.') { for (int k = 0; k < 8; k++) dfs(i, j, k); } } } int ans = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { for (int k = 0; k < 4; k++) { if (g[i][j] == '#') continue; ans = max(ans, sum[i][j][k] + sum[i][j][(k + 1) % 4] - 1); ans = max(ans, sum[i][j][k + 4] + sum[i][j][(k + 1) % 4 + 4] - 1); } } } printf("%d\n", ans); } return 0; }
HDU 5024 Wang Xifeng's Little Plot(广州网络赛C题)
标签:style http color io os ar for sp on
原文地址:http://blog.csdn.net/accelerator_/article/details/39477593