题目大意:给出一个倒三角,由若干个小三角形组成,有些三角形为涂上颜色的,问说最大能找出最大的三角形面积。
解题思路:枚举每个没有上色的三角形,向一个方向枚举层数,注意坐标为奇数的只能往下,偶数只能往上。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 205;
int n, ans, v[N][N];
void init() {
char str[N * 2];
ans = 0;
memset(v, -1, sizeof(v));
for (int i = 0; i < n; i++) {
gets(str);
int len = strlen(str);
for (int j = 0; j < len; j++) {
if (str[j] == '-') v[i][j] = 0;
}
}
}
void dfs(int x, int y, int d, int dir) {
if (x < 0 || x > n) {
ans = max(ans, d);
return;
}
for (int i = y - d; i <= y + d; i++) {
if (v[x][i] == -1) {
ans = max(ans, d);
return ;
}
}
dfs(x + dir, y, d + 1, dir);
}
void solve() {
for (int i = 0; i < n; i++) {
int t = (n - i) * 2 + i - 1;
for (int j = i; j < t; j++) if (v[i][j] == 0) {
if ((j + i) % 2)
dfs(i, j, 0, 1);
else
dfs(i, j, 0, -1);
}
}
}
int main() {
int cas = 1;
while(scanf("%d%*c", &n) == 1 && n) {
init();
solve();
printf("Triangle #%d\n", cas++);
printf("The largest triangle area is %d.\n\n", ans * ans);
}
return 0;
}