这家店的商品有这样的属性:
item A: price 500$ with 100$ reward
item B: price 1000$ with 300$ reward
item C: price 1500$ with 500$ reward
item D: price 3000$ with 650$ reward
问题是我可以用指定金额(例如 6000 美元)获得的最大奖励是多少。
我想出了一个DP解决方案:
class Solution:
def maxReturn(m, n, money):
dp = [0] * (money+1)
for i in range(1, money + 1):
for j in range(len(m)):
if i < m[j]:
continue
if i == m[j]:
dp[i] = n[j]
else:
maxDpi = 0
for k in range(j+1):
maxDpi = max(maxDpi, dp[i-m[k]] + n[k])
dp[i] = maxDpi
return dp[-1]
其中m代表物品价格,n代表对应的奖励。钱是我有的钱。 m 已经被排序,例如 [500, 1000, 1500, ...]。
基本思想是:dp[i] 代表给定金钱 i
的最大奖励。
所以
dp[i] = max n[j] + dp[i-m[j]] for all j in range(0, len(m)-1) such that i >= m[j]
我想知道这个解决方案是否正确?或者其他更好的解决方案?