动态规划,定义dp为恰好满足j的最大正数
注意两点:
- 如何确定那个数更大
- dp[j-cost[i-1]] == "0"时,说明不能恰好组成j-cost[i-1],加上i也不能恰好组成j,所以要跳过不然导致错误答案因为不满足正好等于target而是小于等于target了
class Solution(object):
def largestNumber(self, cost, target):
"""
:type cost: List[int]
:type target: int
:rtype: str
"""
#定义dp为恰好满足target的最大正数
n = len(cost)
dp = ["0"]*(target+1)
dp[0] = ""
#判断大小,长度长的大,相等时直接比较
def max_a(a, b):
if len(a) == len(b):
return max(a, b)
elif len(a) > len(b):
return a
else:
return b
#数组一共就9个数
for i in range(9,0,-1): #大数放在高位
for j in range(target+1): #0:target
if j >= cost[i-1]: #小于消耗的不用考虑
if dp[j-cost[i-1]] == "0": #组成不了dp[j-cost[i-1]],不能考虑
continue
dp[j] = max_a(dp[j],dp[j-cost[i-1]]+str(i))
return dp[target]