Submission #1088479

#TimeUsernameProblemLanguageResultExecution timeMemory
1088479vjudge1Bank (IZhO14_bank)Cpython 3
19 / 100
13 ms3316 KiB
n, m = map(int, input().split())

valores = list(map(int, input().split()))
notas = sorted(list(map(int, input().split())))

def subset_sum(nums, target):
    dp = {0: []}
    
    for num in nums:
        new_sums = {}
        for partial_sum, subset in dp.items():
            new_sum = partial_sum + num
            if new_sum == target:
                return subset + [num]
            if new_sum < target:
                new_sums[new_sum] = subset + [num]
        dp.update(new_sums)
    
    return None

def binary_search(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

def remove_subset_values(nums, subset):
    for value in subset:
        index = binary_search(nums, value)
        if index != -1:
            nums.pop(index)

possivel = 1

for v in valores:
    solution = subset_sum(notas, v)
    if solution == None: possivel = 0
    else: remove_subset_values(notas, solution)

if possivel == 1: print("YES")
elif possivel == 0: print("NO")
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...