python版本

def fn(N,m,goods):
    dp = [[0 for x in range(N+1)] for y in range(m+1)]
    for i,good in enumerate(goods):
        if good["q"] != 0:
            dp[i+1] = dp[i]
        else:
            gv = good["v"]
            gp = good["p"]
            if good["a01"] != None:
                ga1v = good["a01"]["v"]
                ga1p = good["a01"]["p"]
            if good["a02"] != None:
                ga2v = good["a02"]["v"]
                ga2p = good["a02"]["p"]
            for j in range(N+1):
                if j < gv:
                    dp[i+1][j] = dp[i][j]
                if j >= gv:
                    dp[i+1][j] = max(dp[i][j],dp[i][j-gv] + gv*gp)
                if good["a01"] != None and j >= gv+ga1v:
                    dp[i+1][j] = max(dp[i+1][j],dp[i][j-gv-ga1v] + gv*gp + ga1v*ga1p)
                if good["a02"] != None and j >= gv+ga2v:
                    dp[i+1][j] = max(dp[i+1][j],dp[i][j-gv-ga2v] + gv*gp + ga2v*ga2p)
                if good["a02"] != None and j >= gv+ga1v+ga2v:
                    dp[i+1][j] = max(dp[i+1][j],dp[i][j-gv-ga1v-ga2v] + gv*gp + ga1v*ga1p + ga2v*ga2p)
    return dp[m][N]

N_and_m = input().split(' ')
N = int(N_and_m[0])
N = int(N/10)
m = int(N_and_m[1])
goods = []
while True:
    try:
        new_good = {"a01":None,"a02":None}
        good_info = input().split()
        new_good["v"] = int(int(good_info[0])/10)
        new_good['p'] = int(good_info[1])
        new_good["q"] = int(good_info[2])
        goods.append(new_good)
        if int(good_info[2]) > 0 and goods[int(good_info[2])-1]["a01"] == None:
            goods[int(good_info[2])-1]["a01"] = new_good
        elif int(good_info[2]) > 0 and goods[int(good_info[2])-1]["a02"] == None: 
            goods[int(good_info[2])-1]["a02"] = new_good
    except:
        break

result = fn(N,m,goods)
print(result*10)