此题是二维费用,并且第一维费用为常规费用,即上限费用,第二维费用为下限费用。
那么我们的状态转移方程也需要有所调整,在这里需要想清楚下限费用的特性,假如说存在dp[i][j]
和dp[i][k]
并且
k
k
k 小于
j
j
j,那么其实
k
k
k 也包括了
j
j
j,即以
k
k
k 为下限的范围涵盖了以
j
j
j 为下限的范围。
并且我们也需要同时进行可行性dp,因为当费用分为上下限的时候,会有一些情况是错开的,是无法满足的。
那么对于这道题使用dp[j][k]
表示花费最多为
j
j
j,新鲜度最少为
k
k
k 的最大价值,状态转移时注意如果
k
k
k 不满足一个花的
新鲜度的时候,我们仍然能够从dp[j-cost[i]][0]
转移过来。
因为dp[j-cost[i]][0]
表示没选这朵花的时候新鲜度最少为
0
0
0,dp[j][k]
表示新鲜度至少为
k
k
k,那么dp[j-cost[i]][0]
加上这朵花的新鲜度就能够超过
k
k
k,那么当然也能够将新鲜度至少为
k
k
k 的时候更新掉。