def paper(idx,count):
global min_count,result
if count >= min_count:
return
#print_paper()
if idx == len(one_list):
min_count = min(min_count,count)
return
i, j = one_list[idx]
if graph[i][j] == 0:
paper(idx+1,count)
return
for size in range(5,0,-1):
checker = True
if i+size < 11 and j+size <11:
for x in range(i,i+size):
for y in range(j,j+size):
if graph[x][y] == 0:
checker = False
if checker and paper_list[size-1]>0:
for x in range(i, i + size):
for y in range(j, j + size):
graph[x][y] = 0
paper_list[size - 1] -= 1
#print_paper()
paper(idx+1,count+1)
for x in range(i, i + size):
for y in range(j, j + size):
graph[x][y] = 1
paper_list[size - 1] += 1
graph = [[0 for row in range(10)]for col in range(10)]
one_list = []
for i in range(10):
num_list = list(map(int,input().split()))
for j in range(10):
graph[i][j] = num_list[j]
if num_list[j] == 1:
one_list.append([i,j])
paper_list = [5,5,5,5,5]
count = 0
result = 0
min_count = 26
paper(0,0)
if min_count == 26:
print(-1)
else:
print(min_count)
예시 1번
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
answer : 4
예시 2번
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
answer : 5