A-I-4.C

In [2]:
vyska = [int(_) for _ in input().split()]
hmotnost = [int(_) for _ in input().split()]
nosnost = [int(_) for _ in input().split()]
maximalna_vyska = 0
n = len(vyska)
moze_veza = [False for _ in range(1<<n)]
moze_veza[0] = True
for mnozina in range(1, 1<<n):
    celk_vyska = sum(vyska[i] for i in range(n) if mnozina & (1 << i) > 0)
    celk_hmotnost = sum(hmotnost[i] for i in range(n) if mnozina & (1 << i) > 0)
    for skatula in range(n):
        if mnozina & (1 << skatula) > 0:#ak sa skatula nachadza v mnozine
            if nosnost[skatula] >= celk_hmotnost-hmotnost[skatula] and moze_veza[mnozina ^ (1 << skatula)]:
                moze_veza[mnozina] = True
                maximalna_vyska = max(maximalna_vyska, celk_vyska)
print(maximalna_vyska)
1 2 3
4 5 6
7 8 9
6

Cez pole vezi

In [4]:
vyska = [int(_) for _ in input().split()]
hmotnost = [int(_) for _ in input().split()]
nosnost = [int(_) for _ in input().split()]
maximalna_vyska = 0
n = len(vyska)
moze_veza = [False for _ in range(1<<n)]
moze_veza[0] = True
for mnozina in range(1, 1<<n): #vsetky mnoziny skatul
    skatule = [i for i in range(n) if mnozina & (1 << i) > 0]
    #print(mnozina, skatule) #bitovy zapis mnoziny skatul
    celk_vyska = sum(vyska[skatula] for skatula in skatule)
    celk_hmotnost = sum(hmotnost[skatula] for skatula in skatule)
    for skatula in skatule:
        if nosnost[skatula] >= celk_hmotnost-hmotnost[skatula] and moze_veza[mnozina - (1 << skatula)]:
            moze_veza[mnozina] = True
            maximalna_vyska = max(maximalna_vyska, celk_vyska)
            break
print(maximalna_vyska)
1 2 3
4 5 6
7 8 9
6