Untitled

 avatar
unknown
plain_text
2 years ago
884 B
4
Indexable
A= [2,3]
MOD = 1e9+7

def dp3():
    n = len(A)
    dp = [[0] * 3001 for _ in range(n)]
    for i in range(A[-1] + 1):
        dp[n - 1][i] = 1
    pref = [0] * 3001
    pref[0] = dp[n - 1][0]
    for i in range(1, 3001):
        pref[i] = pref[i - 1] + dp[n - 1][i]
    def get_sum(start, end):
        total = pref[end]
        if start > 0:
            total -= pref[start - 1]
        return total
    for ind in range(n - 2, -1, -1):
        for b_val in range(A[ind] + 1):
            c_val = A[ind] - b_val
            lb = max(b_val, A[ind + 1] - A[ind] + b_val)
            ub = A[ind + 1]
            dp[ind][b_val] = get_sum(lb, ub)
        pref[0] = dp[ind][0]
        for i in range(1, 3001):
            pref[i] = pref[i - 1] + dp[ind][i]
    ans = 0
    for i in range(3001):
        ans += dp[0][i]
    return ans % MOD
    
print(dp3())
Editor is loading...