刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

Rainbow的商店(2024.3八级)

Rainbow开了一家商店,在一次进货中获得了N个商品。

已知每个商品的利润和过期时间。

Rainbow每天只能卖一个商品,并且过期商品不能再卖。

Rainbow也可以选择在每天出售哪个商品,并且一定可以卖出。

由于这些限制,Rainbow需要制定一份合理的售卖计划。请你计算一下,Rainbow最终可以获得的最大收益。

时间限制:1000

内存限制:262144

输入

第一行两个整数N。 接下来N行每行两个整数,分别表示每个商品的利润、过期时间。 1<=N,利润,时间<=10000。

输出

输出一个整数,表示Rainbow最终可以获得的最大收益。


样例输入

7
20 1
2 1
10 3
100 2
8 2
5 20
50 10

样例输出

185


提示

第1天卖出20 第2天卖出100 第3天卖出10 第4天卖出50(实际上只要在第10天卖就可以) 第5天卖出5(实际上只要在第20天前卖就可以) 总计185 其它2件商品由于过期、每天只能卖一个的限制,在最优策略下应该不出售。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

对于这个问题,我们可以使用动态规划来解决。我们可以定义一个数组dp,其中dp[i]表示在前i天可以获得的最大收益。对于每个商品,我们可以计算它的过期时间,然后将其按照过期时间从早到晚排序。然后,我们可以遍历每个商品,对于每个商品,我们可以选择在当天出售它,或者不出售它。如果我们选择出售这个商品,那么dp[j] = max(dp[j], dp[j-1] + 利润),其中j是商品的过期时间。如果我们选择不出售这个商品,那么dp[j] = dp[j-1]。最后,dp[N]就是Rainbow最终可以获得的最大收益。

解析:

【喵呜刷题小喵解析】:
这个问题是一个典型的动态规划问题,可以使用动态规划来解决。我们可以定义一个数组dp,其中dp[i]表示在前i天可以获得的最大收益。对于每个商品,我们可以计算它的过期时间,然后将其按照过期时间从早到晚排序。这样,我们就可以保证在每一天,Rainbow都有机会出售所有过期的商品。然后,我们可以遍历每个商品,对于每个商品,我们可以选择在当天出售它,或者不出售它。如果我们选择出售这个商品,那么dp[j] = max(dp[j], dp[j-1] + 利润),其中j是商品的过期时间。如果我们选择不出售这个商品,那么dp[j] = dp[j-1]。最后,dp[N]就是Rainbow最终可以获得的最大收益。由于这个问题中,Rainbow每天只能卖一个商品,并且过期商品不能再卖,所以我们需要按照商品的过期时间从早到晚排序,这样可以保证在每一天,Rainbow都有机会出售所有过期的商品,从而获得最大的收益。
创作类型:
原创

本文链接:Rainbow的商店(2024.3八级) Rainbow开了一家商店,在一次进货中获得了N个商品。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share