Problem: Takahashi, who is a novice in competitive programming, wants to learn M algorithms. Initially, his _understanding level_ of each of the M algorithms is 0.  Takahashi is visiting a bookstore, where he finds N books on algorithms. The i-th book (1\leq i\leq N) is sold for C_i yen (the currency of Japan). If he buys and reads it, his understanding level of the j-th algorithm will increase by A_{i,j} for each j (1\leq j\leq M). There is no other way to increase the understanding levels of the algorithms.  Takahashi's objective is to make his understanding levels of all the M algorithms X or higher. Determine whether this objective is achievable. If it is achievable, find the minimum amount of money needed to achieve it.

Submission attempts (in order):
#coding utf-8
if __name__ == '__main__':
    n, m, x = list(map(int, input().split()))

    
    c = []  
    a = []  

    for i in range(n):
        c_temp, *a_temp = list(map(int, input().split()))  
        c.append(c_temp)
        a.append(a_temp)

    INF = float("inf")
    ans = INF

    for bit in range(1 << n):
        price = calc_price(bit)  
        ans = min(ans, price)  

    if ans == INF:
        print(-1)  
    else:
        print(ans)

def calc_price(bit):
    price_total = 0  
    learn_total = [0] * m  

    for i in range(n):
        if (bit >> i) & 1:  
            price_total += c[i]  
            learn = a[i]  
            for j, la in enumerate(learn):  を加算します enumerateを使うと、range(n)よりスマートです
                learn_total[j] += la

    
    if check(learn_total):
        return price_total 
    else:
        return INF 

def check(learn_total):
    for i in range(m):
        if learn_total[i] < x:
            return False  
    return True 

if __name__ == '__main__':
    n, m, x = list(map(int, input().split()))

    c = []
    a = []

    for i in range(n):
        c_temp, *a_temp = list(map(int, input().split()))  
        c.append(c_temp)
        a.append(a_temp)

    INF = float("inf")
    ans = INF

    for bit in range(1 << n):
        price = calc_price(bit) 
        ans = min(ans, price) 

    if ans == INF:
        print(-1)
    else:
        print(ans)

def calc_price(bit):
    price_total = 0 
    learn_total = [0] * m 

    for i in range(n):
        if (bit >> i) & 1:  
            price_total += c[i]  
            learn = a[i]  
            for j, la in enumerate(learn): 
                learn_total[j] += la

   
    if check(learn_total):
        return price_total 
    else:
        return INF 

def check(learn_total):
    for i in range(m):
        if learn_total[i] < x:
            return False  
    return True 

def check(learn_total):
    for i in range(m):
        if learn_total[i] < x:
            return False  
    return True 

def calc_price(bit):
    price_total = 0 
    learn_total = [0] * m 

    for i in range(n):
        if (bit >> i) & 1:  
            price_total += c[i]  
            learn = a[i]  
            for j, la in enumerate(learn): 
                learn_total[j] += la

   
    if check(learn_total):
        return price_total 
    else:
        return INF

if __name__ == '__main__':
    n, m, x = list(map(int, input().split()))

    
    c = []  
    a = []  

    for i in range(n):
        c_temp, *a_temp = list(map(int, input().split()))  
        c.append(c_temp)
        a.append(a_temp)

    INF = float("inf")
    ans = INF

    for bit in range(1 << n):
        price = calc_price(bit)  
        ans = min(ans, price)  

    if ans == INF:
        print(-1)  
    else:
        print(ans) 

Verdicts: Runtime Error

Runtime Error

Accepted