CloudCoder Python feladatgyujtemeny/tornyok

A MathWikiből
def tornyok(magassagok, k):
    n = len(magassagok)
    # Létrehozzuk az k*n-es táblázatot csupa 0 elemmel.
    tablazat = [[0 for j in range(n)] for i in range(k)]
 
    # tablazat[i][j] értékének reszfeladat(i+1, j+1) értékét
    # szeretnénk kiszámolni (a 0-tól indexelés miatt).
 
    tablazat[0][0] = magassagok[0]
    for j in range(1, n):
        tablazat[0][j] = max(magassagok[j], tablazat[0][j-1])
 
    for i in range(1, k):
        for j in range(n):
            if magassagok[j] >= j:
                epit_osszeg = magassagok[j]
            else:
                epit_osszeg = magassagok[j] + tablazat[i-1][j - magassagok[j] - 1]
            nem_epit_osszeg = tablazat[i][j-1]
            tablazat[i][j] = max(epit_osszeg, nem_epit_osszeg)
    return tablazat[k-1][n-1]
Személyes eszközök