์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ทธ๋ž˜ํ”„

[๋ฐฑ์ค€ 3980 ๐Ÿฅ‡] ์„ ๋ฐœ ๋ช…๋‹จ

1eehyunji 2023. 10. 7. 21:12

https://www.acmicpc.net/problem/3980

 

3980๋ฒˆ: ์„ ๋ฐœ ๋ช…๋‹จ

๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ๋ชจ๋“  ํฌ์ง€์…˜์˜ ์„ ์ˆ˜๋ฅผ ์ฑ„์› ์„ ๋•Œ, ๋Šฅ๋ ฅ์น˜์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค. ํ•ญ์ƒ ํ•˜๋‚˜ ์ด์ƒ์˜ ์˜ฌ๋ฐ”๋ฅธ ๋ผ์ธ์—…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net

๋ฌธ์ œ

์ฑ”ํ”ผ์–ธ์Šค ๋ฆฌ๊ทธ ๊ฒฐ์Šน์ „์„ ์•ž๋‘๊ณ  ์žˆ๋Š” ๋งจ์ฒด์Šคํ„ฐ ์œ ๋‚˜์ดํ‹ฐ๋“œ์˜ ๋ช…์žฅ ํผ๊ฑฐ์Šจ ๊ฐ๋…์€ ์ด๋ฒˆ ๊ฒฝ๊ธฐ์— 4-4-2 ๋‹ค์ด์•„๋ชฌ๋“œ ์ „์ˆ ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์˜ค๋Š˜ ๊ฒฐ์Šน์ „์— ๋›ธ ์„ ๋ฐœ ์„ ์ˆ˜ 11๋ช…์€ ๋ฏธ๋ฆฌ ๊ณจ๋ผ๋‘์—ˆ์ง€๋งŒ, ์–ด๋–ค ์„ ์ˆ˜๋ฅผ ์–ด๋А ํฌ์ง€์…˜์— ๋ฐฐ์น˜ํ•ด์•ผ ํ• ์ง€ ์•„์ง ๊ฒฐ์ •ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

์ˆ˜์„์ฝ”์น˜ ๋งˆ์ดํฌ ํŽ ๋ž€์€ 11๋ช…์˜ ์„ ์ˆ˜๊ฐ€ ๊ฐ๊ฐ์˜ ํฌ์ง€์…˜์—์„œ์˜ ๋Šฅ๋ ฅ์„ 0๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ์ •์ˆ˜๋กœ ์ˆ˜์น˜ํ™” ํ–ˆ๋‹ค. 0์€ ๊ทธ ์„ ์ˆ˜๊ฐ€ ๊ทธ ํฌ์ง€์…˜์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋Š” ๋œป์ด๋‹ค.

์ด๋•Œ, ๋ชจ๋“  ์„ ์ˆ˜์˜ ํฌ์ง€์…˜์„ ์ •ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋ชจ๋“  ํฌ์ง€์…˜์— ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•ด์•ผ ํ•˜๊ณ , ๊ฐ ์„ ์ˆ˜๋Š” ๋Šฅ๋ ฅ์น˜๊ฐ€ 0์ธ ํฌ์ง€์…˜์— ๋ฐฐ์น˜๋  ์ˆ˜ ์—†๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค๋Š” 11์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , i๋ฒˆ ์ค„์€ 0๊ณผ 100์‚ฌ์ด์˜ 11๊ฐœ์˜ ์ •์ˆ˜ sij๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. sij๋Š” i๋ฒˆ์„ ์ˆ˜๊ฐ€ j๋ฒˆ ํฌ์ง€์…˜์—์„œ ๋›ธ ๋•Œ์˜ ๋Šฅ๋ ฅ์ด๋‹ค. ๋ชจ๋“  ์„ ์ˆ˜์—๊ฒŒ ์ ํ•ฉํ•œ ํฌ์ง€์…˜์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ 5๊ฐœ์ด๋‹ค. (๋Šฅ๋ ฅ์น˜๊ฐ€ 0๋ณด๋‹ค ํฌ๋‹ค)

์ถœ๋ ฅ

๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ๋ชจ๋“  ํฌ์ง€์…˜์˜ ์„ ์ˆ˜๋ฅผ ์ฑ„์› ์„ ๋•Œ, ๋Šฅ๋ ฅ์น˜์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค. ํ•ญ์ƒ ํ•˜๋‚˜ ์ด์ƒ์˜ ์˜ฌ๋ฐ”๋ฅธ ๋ผ์ธ์—…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด

import sys

t=int(sys.stdin.readline())

# idx : idx๋ฒˆ์งธ ํฌ์ง€์…˜์— ์˜ฌ ์„ ์ˆ˜ ์ €์žฅ
# total : ์ด ๋Šฅ๋ ฅ์น˜
def DFS(idx, total):
    global maxans
    if idx == 11:
        maxans = max(maxans, total)
        return

    for p in range(11):
        # ์ด๋ฏธ ํฌ์ง€์…˜์— ๋ฐฐ์น˜๋œ ์„ ์ˆ˜์ด๊ฑฐ๋‚˜ ์„ ์ˆ˜๊ฐ€ ํ•ด๋‹น ํฌ์ง€์…˜์˜ ๋Šฅ๋ ฅ์น˜๊ฐ€ 0์ธ ๊ฒฝ์šฐ, ๋‹ค์Œ ์„ ์ˆ˜ ํƒ์ƒ‰
        if visited[p] == 1 or player[p][idx] == 0:
            continue
        visited[p] = 1
        total += player[p][idx]
        DFS(idx + 1, total)
        total -= player[p][idx]
        visited[p] = 0

for _ in range(t):
    player=[]
    # input
    for i in range(11):
        power=list(map(int, sys.stdin.readline().split(' ')))
        player.append(power)
    visited=[0]*(11)
    maxans=0
    DFS(0,0)
    print(maxans)

https://1eehyunji.tistory.com/entry/%EB%B0%B1%EC%A4%80-3967-%F0%9F%A5%87-%EB%A7%A4%EC%A7%81-%EC%8A%A4%ED%83%80

 

[๋ฐฑ์ค€ 3967 ๐Ÿฅ‡] ๋งค์ง ์Šคํƒ€

๋ฌธ์ œ ๋งค์ง ์Šคํƒ€๋Š” 1๋ถ€ํ„ฐ 12๊นŒ์ง€ ์ˆซ์ž๊ฐ€ ํ—ฅ์‚ฌ๊ทธ๋žจ(hexagram)์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ๋ชจ์–‘์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋งค์ง ์Šคํƒ€์˜ ์ด๋ฆ„์— ๋งค์ง์ด ๋“ค์–ด๊ฐ€๋Š” ์ด์œ ๋Š” ์ˆซ์ž ๋„ค ๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ค„์˜ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํ•ฉํ•˜๋ฉด 26

1eehyunji.tistory.com

  • ์œ„ ๋ฌธ์ œ์™€ ๋น„์Šทํ•˜๊ฒŒ DFS๋ฅผ ์ด์šฉํ•œ ์™„์ „ ํƒ์ƒ‰ ์‚ฌ์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค!
  • DFS(idx, total) : idx๋ฒˆ์งธ ํฌ์ง€์…˜์— ์–ด๋–ค ์„ ์ˆ˜๊ฐ€ ์˜ฌ์ง€ ํƒ์ƒ‰ํ•˜๋Š” DFS์ด๊ณ , total์€ ์ด์ „ ํฌ์ง€์…˜์— ์˜ค๋Š” ์„ ์ˆ˜๋“ค์„ ๊ณ„์‚ฐํ•ด์„œ ๋‚˜์˜จ ํ˜„์žฌ๊นŒ์ง€์˜ ์ด ๋Šฅ๋ ฅ์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 
  • ๊ฐ idx๋ณ„๋กœ DFS๋ฅผ ๋Œ๋ฉด์„œ ์•„์ง ํฌ์ง€์…˜์ด ๋ฐฐ์ •๋˜์ง€ ์•Š์•˜๊ณ (visited[p]==0), ํ•ด๋‹น ํฌ์ง€์…˜์˜ ๋Šฅ๋ ฅ์น˜๊ฐ€ 0 ์ด์ƒ(player[p][idx]>0)์ธ ์„ ์ˆ˜๋ฅผ idx๋ฒˆ ํฌ์ง€์…˜์— ๋ฐฐ์ •ํ•˜๊ณ , (visitied[p]=1, total+=player[p][idx]) DFS ํƒ์ƒ‰ ํ›„์— ํ•ด๋‹น DFS๊ฐ€ ํƒ์ƒ‰์ด ์ข…๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ์„ ํƒํ•ด์ œ(visited[p]=0, total-=player[p][idx])ํ•ด์ค€๋‹ค.
  • ์ด์™€ ๊ฐ™์€ DFS ํƒ์ƒ‰ ๊ณผ์ •์—์„œ idx๊ฐ€ 11์ด ๋˜๋ฉด, ์ฆ‰ ๋ชจ๋“  ํฌ์ง€์…˜์— ๊ฐ ์„ ์ˆ˜๋“ค์„ ๋ฐฐ์ •ํ•˜๋ฉด total ๊ฐ’๊ณผ maxans ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ“๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.