题目描述
题解
这种比较特殊的 01 背 包 01背包 01背包还是没有做到过唉。。
这道题我们观察数据,发现 v i v_i vi的具体数字很小,但是背包的花费却很大,我们可以考虑用另外一张方式进行背包:用价值作为状态,用花费作为具体的 D P DP DP值进行计算。
求在体积限制为代价最大,等价于在相同的价值下体积最小:即用最小的体积买到最大的代价。
为了更加方便统计答案,我们对这些店进行排序:按照每一家店的时间来进行排序。
我们设 f [ i ] [ j ] f[i][j] f[i][j]表示前i家店,购买出价值为 j j j的最小花费,转移和正常的01背包相似:
f [ i ] [ j ] = m i n ( f [ i − 1 ] [ j ] , f [ i − v [ i ] ] + c [ i ] ) f[i][j]=min(f[i-1][j],f[i-v[i]]+c[i]) f[i][j]=min(f[i−1][j],f[i−v[i]]+c[i])
v [ i ] v[i] v[i]表示价值, c [ i ] c[i] c[i]表示花费。
这一步完成后,我们再改变一下状态:
- 设 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i个商店,价值至少为