Cod sursa(job #2539314)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 5 februarie 2020 19:54:17
Problema Parantezare optima de matrici Scor 60
Compilator py Status done
Runda Arhiva educationala Marime 0.86 kb
import math

def inp_gen(fname):
    with open(fname, 'rt') as fin:
        for line in fin:
            for val in line.split():
                yield int(val)

if __name__ == "__main__":
    it = inp_gen("podm.in")
    n = next(it)
    d = [[math.inf for _ in range(n + 1)] for _ in range(n + 1)]
    v = {}

    for i in range(n + 1):
        x = next(it)
        v[i] = x

    for i in range(1, n + 1):
        if i < n:
            d[i][i + 1] = v[i - 1] * v[i] * v[i + 1]
        d[i][i] = 0


    for dim in range(2, n):
        for left in range(1, n):
            right = left + dim
            if right > n:   continue

            for k in range(left, right):
                d[left][right] = min(d[left][right], d[left][k] + d[k + 1][right] + v[left - 1] * v[k] * v[right])

    with open("podm.out", "wt") as fout:
        fout.write('{}\n'.format(d[1][n]))