1 条题解
-
0
题解
思路
若产品 在买车前 个月选择,那么买车时它的净贡献是
选择 个产品后无需空等月份:空等只会增加还款。因此这些产品分别占用 ,问题也可以看成产品与月份位置的最大权匹配。
做法
子任务 1:枚举顺序
枚举所有产品排列的所有前缀,直接计算每个前缀在最后一个月月中的余额。复杂度为 。
子任务 2:匈牙利算法
建立二分图。左侧位置 与右侧产品 的权为 。依次加入位置 ,每次匈牙利算法得到选择恰好当前数量产品时的最大权匹配,取所有匹配规模的最大值。复杂度为 。
满分算法
将产品按 从大到小排序。对于一个最终被选择的产品:
- 若买车前已经完成全部还款,它的贡献固定为 ;
- 否则,所有这类尚未还清的产品按 递减排列最优。若它是其中第 个,贡献为 。
设 表示考虑排序后前 个产品,其中有 个被归入“买车时尚未还清”这一类时的最大贡献。产品 有三种选择:不用;选用且已还清;选用且成为第 个尚未还清产品。转移为
$$\begin{aligned} dp[i][j]&\gets dp[i-1][j],\\ dp[i][j]&\gets dp[i-1][j]+a_i-k_ib_i,\\ dp[i][j]&\gets dp[i-1][j-1]+a_i-(j-1)b_i. \end{aligned}$$所有状态中的最大值即答案。
复杂度
枚举算法为 ,匈牙利算法为 。满分动态规划为 时间、 额外空间。
- 1
信息
- ID
- 1209
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者