BAEKJOON 14502チキン出前
BAEKJOON 14502チキン出前
質問する
https://www.acmicpc.net/problem/14502
に答える
コード#コード#
import sys
sys.stdin = open('input.txt')
def get_combi(arr,start,n,temp): # 치킨집의 경우의 수를 구하는 함수
if len(temp) == n:
get_dist(home_idx,temp)
for i in range(start,len(arr)):
if visit[i] == 0:
visit[i] = 1
get_combi(arr, i, n, temp+[arr[i]])
visit[i] = 0
def get_dist(home, chicken): # 치킨집과 가정집 사이의 최단 거리를 구하는 함수
global cnt
result = 0
for i in home:
mmin = 1000
for j in chicken:
dist = abs(j[0]-i[0])+abs(j[1]-i[1])
if dist < mmin:
mmin = dist
result += mmin
if result < cnt:
cnt = result
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
home_idx = []
chicken = []
for i in range(len(arr)): # 미리 치킨집과 가정집의 idx를 구함
for j in range(len(arr)):
if arr[i][j] == 1:
home_idx.append([i+1,j+1])
if arr[i][j] == 2:
chicken.append([i+1,j+1])
visit = [0]*(len(chicken)+1)
cnt = 1000000
for i in range(1,M+1): # 치킨집의 idx를 가능한 수에 대해 가능한 경우의 수를 모두 구해서 가정집과의 거리를 비교함
chicken_good = []
get_combi(chicken, 0,i,[])
print(cnt)
結果
組み合わせを利用すれば解決しやすい問題です.実施も難しくないと思いますので、簡単に解決できました.すべての状況を考慮するだけで、時間は少し残念なようです.どうすればいいか考えて追跡すればいい
Reference
この問題について(BAEKJOON 14502チキン出前), 我々は、より多くの情報をここで見つけました https://velog.io/@shawnk123/BAEKJOON-14502-치킨-배달テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol