todo: 先贴下思路,暂存一下
- 考虑 dp,令 dp[i][j] 表示前 i 个车型,发布其中 j 个车型,所能得到的最大金钱数
- 对每个车型,按成本升序进行排序。因为对于某一个解集,成本从小到大的发布顺序必然是可行的
- 考虑 dp 的状态转移,对于第 i 个车型,我们可以选择买或者不买,假如不买的话,那么 dp[i][j] = dp[i - 1][j]; 假如要买,首先需要 dp[i - 1][j - 1] 不少于车型 i 的成本,此时 dp[i][j] = dp[i - 1][j - 1] + v[i](车型 i 的利润,收入 - 成本)
综上所述 dp[i][j]=max{dp[i−1][j], {dp[i−1][j−1]+v[i], dp[i−1][j−1]≥cost[i]0, else}
memset(dp, 0, sizeof(dp));
std::sort(a + 1, a + n + 1);
dp[0][0] = k;
for (int i = 1; i <= n; ++i) {
dp[i][0] = k;
for (int j = 1; j <= i; ++j) {
if (dp[i - 1][j - 1] >= a[i].cost) {
dp[i][j] = std::max(dp[i][j], dp[i - 1][j - 1] + a[i].v);
}
dp[i][j] = std::max(dp[i][j], dp[i - 1][j]);
}
}