Search code examples
pythonobjectmultidimensional-arrayintsubscript

Error: "int" object is not subscriptable in python


i am trying to solve a problem in hackerearth and the below code is giving me an error:

"int" object is not subscriptable- at line 4 (if(dp[g][p][d] != -1):)

I know this error occurs when we try to index an int obj but here dp is a 3d list.

def max_val(i,g,p,d):
    if(i==n or g==maxG or p==maxP or d==maxD):
        return 0;
    if(dp[g][p][d] != -1):
        return dp[g][p][d]
    
    val=dp[g][p][d]
    if(g<maxG):
        val=max(val,gold[i]+max_val(i+1,g+1,p,d))
    if(p<maxP):
        val=max(val,plat[i]+max_val(i+1,g,p+1,d))
    if(d<maxD):
        val=max(val,dia[i]+max_val(i+1,g,p,d+1))

    return val;

n=int(input())

maxG,maxP,maxD=[int(x) for x in input().split()]

total=0

gold=[]
plat=[]
dia=[]
dp=[[-1 for x in range(n)] for x in range(n)]

for _ in range(n):
    x=[int(i) for i in input().split()]
    gold.append(x[0])
    plat.append(x[1])
    dia.append(x[2])

max_val(0,0,0,0)

Solution

  • dp=[[-1 for x in range(n)] for x in range(n)] will return a two-dimensional list because you're creating lists by doing [-1 for x in range(n)] inside a list which is the outer one. You can create a three-dimensional list like below:

    dp=[[[-1 for x in range(2)] for x in range(2)] for x in range(2)]
    print(dp) # outputs [[[-1, -1], [-1, -1]], [[-1, -1], [-1, -1]]]
    print(dp[0][0][0]) # outputs -1