P5662 CSP-J 2019 纪念品
1|0P5662 CSP-J 2019 纪念品
1|1基本思路
状态方程
满头大汗地想了一个半小时,推导出一个可行的状态方程。
状态转移
首先第一维明显可以用滚动数组优化。
然后就是枚举
我把购买当前物品直接等价成价值先减去本轮物品的价格再加上下一轮该物品的价格,也是可行的。
然而最关键的步骤,状态转移方程,我推不对。
理论上应该有三个状态
- 不操作当前物品(不买不卖)
- 这个好说
- 购买当前物品
- 这里
的第三维我犯难了,凭直觉我写了
- 卖掉当前物品
- 这里我几乎是没法推出来,无脑写了
因为第二个第三个状态的模糊,我的代码样例都跑不了。但还是先挂一下。
代码实现
1|2改进思路
状态方程
题解竟然和我一模一样。
状态转移
这可就太值得说道说道了。
其实我对于不操作当前物品和购买当前物品的状态转移都是完全正确的。
然而第三个状况,也就是卖掉当前物品,不是不对,而是根本不应该考虑。
因为结合我对状态方程的定义
第
天,前 种纪念品,花费 金币所能得到的第二天最大卖出价格
以及我对物品的处理
所有物品的买入等价成第二天最大的卖出价格的增加。
实际上,所有当前我所拥有的物品都已经被当成价格而非物品来考虑了,并且也参与了该轮最大价格的构成。
另一方面,我当时在推导卖掉当前物品时万分别扭就是因为我状态方程的值是下一轮最大的卖出价格,而我卖掉当前物品,获利的是本轮,我无法用一个用来记录下一轮价格的状态来操作本轮的价格变化。
换句话说,所谓卖掉当前物品这个情况,实际上已经被上一轮自动考虑了,即所有购买的物品都被自动卖出了,除非你不选择购买本轮的物品(即花掉上轮自动卖出的钱),否则影响是一直存在的,所以被购买的物品已经在上一轮被操作过了,在本轮不用也不能对它进行二次操作。
代码实现
首先把卖掉当前物品的情况删去。
然后是
先贴上这样处理完的代码
然而还是不对,犯了一个严重的错误,又把完全背包和零一背包的处理混淆了。
零一背包从
终于AC
__EOF__

本文链接:https://www.cnblogs.com/kdlyh/p/17815154.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下