반응형
포인트
- 한번에 푼 문제라서 기분이 좋습니다. ㅎㅎㅎ 이번 문제는 구현을 위주로 한 문제 입니다. 일꾼들이 겹치지 않게 배치를 하고 꿀을 채취해서 이를 계산하는 그런 문제 입니다.
- 4중 포문이 조금 불편하긴 하지만 겹치는 부분을 표현하는 방법입니다.
저는 일꾼들의 시작 지점들을 기준으로 정했습니다. 일꾼 2의 시작 좌표가 일꾼 1의 좌표와 겹치면 통과 일꾼 2가 끝나는 지점과 시작 지점들이 겹치면 통과의 방식으로 구현을 하였습니다.
🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다.
python
import sys
sys.stdin = open('input.txt')
def combia(index: int, honey: list) -> None:
"""
worker1 을 조합을 재귀 적으로 구했을 때 값을 나타낸다.
:param index:
:param honey:
:return:
"""
if index <= len(honey): # 더하고 있는데 값이 크면 백트랙킹
temp = sum(a)
if temp > c:
return
if index == len(honey): # 수익 값을 더해준다.
temp = sum(map(lambda x: x * x, a))
ta.append(temp)
return
if index > len(honey):
return
# 조합을 구하는 방법
a.append(honey[index])
combia(index + 1, honey)
a.pop()
combia(index + 1, honey)
def combib(index: int, honey: list) -> None:
"""
worker2를 조합을 재귀 적으로 구했을 때 값을 나타낸다.
:param index:
:param honey:
:return:
"""
if index <= len(honey): # 더하고 있는데 값이 크면 백트랙킹
temp = sum(b)
if temp > c:
return
if index == len(honey):
temp = sum(map(lambda x: x * x, b))
tb.append(temp)
return
if index > len(honey):
return
# 조합을 구하는 방법
b.append(honey[index])
combib(index + 1, honey)
b.pop()
combib(index + 1, honey)
def calc(worker1: list, worker2: list) -> None:
"""
일꾼 1하고 일꾼 2의 값을 구하고 전체적인 합을 나타낸다
:param worker1:
:param worker2:
"""
global result
combia(0, worker1)
combib(0, worker2)
# 조합을 통해서 C 이하의 꿀을 채취를 하여서 max 값을 계산
result = max(result, max(ta) + max(tb))
for test in range(1, int(input()) + 1):
n, m, c = map(int, input().split())
data = [list(map(int, input().split())) for _ in range(n)]
result = 0
for row1 in range(n):
for col1 in range(n - m + 1):
for row2 in range(n):
for col2 in range(n - m + 1):
ta, a = [], []
tb, b = [], []
if row1 == row2 and (col1 <= col2 <= col1 + m - 1 or col1 <= col2 + m - 1 <= col1 + m - 1):
continue
worker1 = data[row1][col1:col1 + m]
worker2 = data[row2][col2:col2 + m]
calc(worker1, worker2)
print('#{} {}'.format(test, result))
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 미생물 격리 (0) | 2021.03.30 |
---|---|
[알고리즘] 보물상자 비밀번호 (0) | 2021.03.29 |
[알고리즘] 경사로 + 활주로 건설 (0) | 2021.03.24 |
[알고리즘] 벽돌 깨기 (0) | 2021.03.23 |
[알고리즘] 이중우선순위큐 (0) | 2021.03.19 |
댓글