题意:
给出一个倒三角,由若干个小三角形组成,有些三角形上涂有颜色,问说最大能找出最大的三角形面积。
解析:
枚举每个没有上色的三角形,作为顶点,向一个方向逐层搜索。
注意:坐标和为奇数的只能往下,偶数只能往上。
AC代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 105;
char grid[N][N*2];
int n;
int dfs(int x, int y) {
int star = y, end = y;
int h = 0, cur = x;
if((x+y) % 2 == 0) { //顶点朝上
while(true) {
for(int i = star; i <= end; i++)
if(grid[cur][i] != '-')
return h*h;
h++;
star--, end++, cur--;
}
}else { //顶点朝下
while(true) {
for(int i = star; i <= end; i++)
if(grid[cur][i] != '-')
return h*h;
h++;
star--, end++, cur++;
}
}
return h*h;
}
int main() {
int cas = 0;
while(scanf("%d", &n) != EOF && n) {
getchar();
for(int i = 0; i < n; i++) gets(grid[i]);
int ans = 0;
for(int i = 0; i < n; i++) {
for(int j = i; j < n*2-1-i; j++) {
if(grid[i][j] == '-')
ans = max(ans, dfs(i, j));
}
}
printf("Triangle #%d\n", ++cas);
printf("The largest triangle area is %d.\n\n", ans);
}
return 0;
}