백준 문제풀이

백준 3056 - 007 [Python]

Vermeil 2021. 9. 2. 16:41

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

 

3056번: 007

비밀 요원 007은 제임스 본드로 유명한 비밀 요원이다. 최근 알려진 정보에 의하면 제임스본드는 대다수 미션을 자신이 직접 수행하지 않는다고 한다. 본드는 미션을 자신과 비슷하게 생긴 사촌

www.acmicpc.net

DP Using Bitfield

 

dp[bit] = (상태 bit에서의 최대 확률) 이라고 정의하자.

dp[bit] = max(dp[bit], f(x + 1, bit | (1 << i)) * a[x][i] / 100) 이 된다.

 

템플릿 코드

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import sys, math
import heapq
 
from collections import deque
input = sys.stdin.readline
 
hqp = heapq.heappop
hqs = heapq.heappush
 
#input
def ip(): return int(input())
def sp(): return str(input().rstrip())
 
def mip(): return map(int, input().split())
def msp(): return map(str, input().split().rstrip())
 
def lmip(): return list(map(int, input().split()))
def lmsp(): return list(map(str, input().split().rstrip()))
 
#gcd, lcm
def gcd(x, y):
    while y:
        x, y = y, x % y
    return x
 
def lcm(x, y):
    return x * y // gcd(x, y)
 
#prime
def isPrime(x):
    if x<=1return False
    for i in range(2int(x**0.5)+1):
        if x%i==0:
            return False
    return True
 
# Union Find
# p = {i:i for i in range(1, n+1)}
def find(x):
    if x == p[x]:
        return x
    q = find(p[x])
    p[x] = q
    return q
 
def union(x, y):
    x = find(x)
    y = find(y)
 
    if x != y:
        p[y] = x
 
def getPow(a, x):
    ret = 1
    while x:
        if x&1:
            ret = (ret * a) % MOD
        a = (a * a) % MOD
        x>>=1
    return ret
 
def getInv(x):
    return getPow(x, MOD-2)
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dp = [-1 for _ in range(1 << 20)]
def f(x, bit):
    if x == n:
        return 1
    if dp[bit] != -1:
        return dp[bit]
    for i in range(n):
        if not bit & (1 << i):
            dp[bit] = max(dp[bit], f(x + 1, bit | (1 << i)) * a[x][i] / 100)
    return dp[bit]
 
= ip()
= [lmip() for _ in range(n)]
print(f(00* 100)
cs