444 div1 easy
TLEしたので枝刈りしたら通った
# coding: utf-8 def unfold(grid, limit, i, j, n): if i - n + 1 < 0: return False if j + n > len(grid)-1: return False tri = 0 for h in range(n): if grid[j+h][i+1] == '#': return False if grid[j+h][i-h] != '/': return False for w in range(h): if grid[j+h][i-w] == '/': tri += 1 if tri > limit: return False if grid[j+h][i-w] == '.': return False for w in range(n): if grid[j+n][i-w] == '#': return False return True class UnfoldingTriangles: def solve(self, grid, unfoldLimit): y = len(grid) x = len(grid[0]) g = [[c for c in s] for s in grid] g.append(['.' for i in range(x+1)]) for i in range(y): g[i].append('.') ans = -1 for j in range(y): for i in range(x): for k in range(min(x,y)): k += 1 if k > ans and unfold(g, unfoldLimit, i, j, k): ans = k if ans == -1: return -1 return ans * (ans + 1) / 2