返回从商店购买商品的最大奖励

时间:2021-04-30 03:14:00

标签: dynamic-programming

这家店的商品有这样的属性:

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]

我想知道这个解决方案是否正确?或者其他更好的解决方案?

0 个答案:

没有答案