大概意思是给你2个数分别代表物品个数和你带的钱数,每个物品有3个值,p,q,v,分别表示买该物品所花的钱,买该物品最低所带的钱,物品的价值。得出最大的价值。
很明显是01背包。
则状态转移方程为:
for(i=0;i<n;i++)
for(j=m;j>=a[i].q;j--)
dp[j]=max(dp[j],dp[j-a[i].p]+a[i].w).
若保证动归方程无后效性,dp[j-a[i].p]一定要比dp[j]先算,j最小为a[i].q,所以需按q-p从小到大排序。
代码如下: