题意理解
有 nnn 个 MM,每个需要花费 rmb[i]rmb[i]rmb[i] 块钱、rp[i]rp[i]rp[i] 点人品、time[i]time[i]time[i] 的时间。现有 mmm 块钱和 rrr 点人品,求:
1. 先最大化能泡到的 MM 数量
2. 在数量最多的前提下,最小化总时间
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
思路分析
这是二维费用背包问题,有两种费用(金钱、人品),需要同时优化数量和时间。
设 dp[j][k]dp[j][k]dp[j][k] 表示:花费 jjj 块钱和 kkk 点人品能泡到的最多 MM 数量。
设 t[j][k]t[j][k]t[j][k] 表示:在 dp[j][k]dp[j][k]dp[j][k] 对应的最多数量下,花费的最少时间。
状态转移(01背包,逆序枚举):
对于每个 MM,考虑选或不选:
* 如果选了能泡到更多 MM:更新数量和时间
* 如果数量相同:取时间更小的
边界条件:
* dp[j][k]=0dp[j][k] = 0dp[j][k]=0,t[j][k]=0t[j][k] = 0t[j][k]=0:初始泡 0 个 MM,花费 0 时间
答案: t[m][r]t[m][r]t[m][r]
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
参考代码