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):
import sys
import numpy as np
from itertools import combinations
sys.setrecursionlimit(10 ** 6)  
to_index = lambda x: int(x) - 1  
print_list_in_2D = lambda x: print(*x, sep="\n")  


def input_int():
    return int(input())

def map_int_input():
    return map(int, input())

MII = map_int_input

def MII_split():
    return map(int, input().split())

def MII_to_index():
    return map(to_index, input())

def MII_split_to_index():
    return map(to_index, input().split())


def list_int_inputs():
    return list(map(int, input()))

LII = list_int_inputs

def LII_split():
    return list(map(int, input().split()))


def LII_2D(rows_number):
    return [LII() for _ in range(rows_number)]

def LII_split_2D(rows_number):
    return [LII_split() for _ in range(rows_number)]

N, M, X = MII_split()

books = []
# prices = []
for i in range(N):
    book = LII_split()
    # prices.append(book[0])
    books.append(book)


# chosen_books = []
# is_chosen = [False for _ in range(N)]
price = 0
min_price = -1
for i in range(N):  

    for tmp_books in combinations(books, i + 1):
        algo_skills = np.array([0 for _ in range(M)])
        price = 0
        for skills in tmp_books:
            algo_skills += np.array(skills[1:])
            price += skills[0]
        if np.all(algo_skills >= X):
            if min_price == -1 or price < min_price:
                min_price = price

print(price)

import sys
import numpy as np
from itertools import combinations
sys.setrecursionlimit(10 ** 6)  
to_index = lambda x: int(x) - 1  
print_list_in_2D = lambda x: print(*x, sep="\n")  


def input_int():
    return int(input())

def map_int_input():
    return map(int, input())

MII = map_int_input

def MII_split():
    return map(int, input().split())

def MII_to_index():
    return map(to_index, input())

def MII_split_to_index():
    return map(to_index, input().split())


def list_int_inputs():
    return list(map(int, input()))

LII = list_int_inputs

def LII_split():
    return list(map(int, input().split()))


def LII_2D(rows_number):
    return [LII() for _ in range(rows_number)]

def LII_split_2D(rows_number):
    return [LII_split() for _ in range(rows_number)]

N, M, X = MII_split()

books = []
# prices = []
for i in range(N):
    book = LII_split()
    # prices.append(book[0])
    books.append(book)


# chosen_books = []
# is_chosen = [False for _ in range(N)]
price = 0
min_price = -1
for i in range(N):  

    for tmp_books in combinations(books, i + 1):
        algo_skills = np.array([0 for _ in range(M)])
        price = 0
        for skills in tmp_books:
            algo_skills += np.array(skills[1:])
            price += skills[0]
        if np.all(algo_skills >= X):
            if min_price == -1 or price < min_price:
                min_price = price

print(min_price)

Verdicts: Wrong Answer

Accepted