def exact_change_dynamic(amount,coins):
    """
    counts[x] counts the number of ways an amount of x can be made in exact change out of a subset of coins
    given in the list of denominations 'coins'.
    Initially there are no possibilities, if no coins are allowed
    >>> exact_change_dynamic(20,[50,20,10,5,2,1])
    [1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 11, 12, 15, 16, 19, 22, 25, 28, 31, 34, 41]
    >>> exact_change_dynamic(100,[100,50,20,10,5,2,1])[-10:]
    [3229, 3376, 3484, 3631, 3778, 3925, 4072, 4219, 4366, 4563]
    """
    counts = [0]*(amount+1)
    # Except: there is 1 way to get a change of 0 ct using no coins
    counts[0] = 1
    # Recalculate counts by allowing additional denominations from coins one by one
    for denomination in coins:
        for x in range(denomination,amount+1):
            # Using an additional coin of 'denomination' we have an additional 'counts[x-denomination]' possibilities
            #
            counts[x] += counts[x-denomination]
    return counts