dp with dimensions [n][maxAmount + 1][maxCoupons + 1] to -1, representing uncomputed states.dfs(i, budget, coup) that returns the maximum tastiness from the i-th fruit to the last fruit, given the remaining budget and coup coupons.i is equal to the length of the price array, return 0 as the base case.dp[i][budget][coup] is already computed, return its value to avoid recomputation.dfs(i + 1, budget, coup) to get the maximum tastiness if we skip the i-th fruit.dfs(i + 1, budget - price[i], coup) and add tastiness[i] to get the maximum tastiness if we buy the i-th fruit without a coupon.dfs(i + 1, budget - price[i] // 2, coup - 1) and add tastiness[i] to get the maximum tastiness if we buy the i-th fruit with a coupon.dp[i][budget][coup].dp[i][budget][coup].dfs(0, maxAmount, maxCoupons) to start the recursion from the first fruit.