SRM 448 div1 easy

期待値計算

#coding: utf-8
#        1 2 3 4 5 6 7 8 9 T
cs = [0, 4,4,4,4,4,4,4,4,4,16]
scr= [0,11,2,3,4,5,6,7,8,9,10]

def solve(v,s):
    if s >= 21:
        return 0.0
    else:
        a = sum(v)
        e = 0.0
        for i in range(1,11):
            if v[i] > 0:
                n = v[i]
                v[i] -= 1
                e += (solve(v, s+scr[i]) + 1) * n / a
                v[i] += 1
        return e
class TheBlackJackDivOne:
    def expected(self, cards):
        crd = []
        for d in cards:
            c = d[0]
            if c == 'A':
                crd.append(1)
                cs[1] -= 1
            elif '0' <= c <= '9':
                crd.append(int(c))
                cs[int(c)] -= 1
            else:
                crd.append(10)
                cs[10] -= 1
        s = sum(crd)
        return solve(cs,s)