結果

問題 No.309 シャイな人たち (1)
ユーザー tjaketjake
提出日時 2015-12-02 15:55:02
言語 Python2
(2.7.18)
結果
TLE  
実行時間 -
コード長 1,616 bytes
コンパイル時間 111 ms
コンパイル使用メモリ 6,516 KB
実行使用メモリ 15,100 KB
最終ジャッジ日時 2023-10-12 08:58:12
合計ジャッジ時間 10,532 ms
ジャッジサーバーID
(参考情報)
judge15 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 TLE -
testcase_01 -- -
testcase_02 -- -
testcase_03 -- -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

from itertools import product

inputs = lambda:map(int, raw_input().split())
r, c = inputs()
raw_input()
p = [inputs() + [0] for i in xrange(r)] + [0]*(c+1)
raw_input()
s = [inputs() + [4] for i in xrange(r)] + [4]*(c+1)

dp = [[0]*(2**c) for i in xrange(r+1)]

def bit_get(v, i):
    if i<0: return 0
    return (v>>i) & 1

def f(a, b, c):
    r  = pp[j] if a else 100-pp[j]
    r *= pi[j-1] if b else 100-pi[j-1]
    r *= pi[j+1] if c else 100-pi[j+1]
    return r/1000000.0

dp[0][0] = 1.

ans = 0

for i in xrange(r):
    sp = s[i-1]
    si = s[i]
    pp = s[i]
    pi = p[i]
    dpp = dp[i]
    dpi = dp[i+1]
    for S in xrange(2**c):
        if dpp[S]==0.0:
            continue
        for T in xrange(2**c):
            res = dpp[S]
            for j in xrange(c):
                if si[j]==0:
                    res *= (pi[j] if bit_get(T, j) else 100-pi[j])/100.0
                else:
                    x, y, z = bit_get(S, j), bit_get(T, j-1), bit_get(T, j+1)
                    #print i, bin(S), bin(T)
                    #print x, y, z, f(x, y, z)
                    if x+y+z >= si[j]:
                        #res *= (pi[j] if bit_get(T, j) else 100-pi[j])*f(x, y, z)/100.0
                        res *= (pi[j] if bit_get(T, j) else 100-pi[j])/100.0
                    else:
                        if bit_get(T, j):
                            res = 0.0
                            break
            dpi[T] += res
            #print bin(T), res
        #print i, "result"
    for T in xrange(2**c):
        #print bin(T), dpi[T]
        ans += bin(T).count("1") * dpi[T]
#print dp
print ans
0