[CSP-J2019] 纪念品

[CSP-J2019] 纪念品 - 洛谷

稍微一读题,每种纪念品可以买无数次,有总钱数,价格,以及天数,应该都可以想到是完全背包。

总钱数:背包容量;

纪念品价格:每件物品的价值和体积;

纪念品数量:物品的种类。

可是到这就又犯难了:纪念品的价格每天都在变,还有手里的钱和纪念品数量在变,还要买或卖,如果都传入状态中,肯定炸空间。

我们一个一个解决:

纪念品的价格尽管每天在变,但题目给出了每天每种的价格。

手里钱、纪念品数以及买卖其实用一个简单的思路就足以解决:我们可以每天早上把手里所有纪念品全部卖掉,获得一天的本金,fufu,如果卖掉了有一些不该卖的,就再买回来,这样相当于每天每件纪念品就只有买或不买,就可以转化为典型的完全背包,这其实也是一种变相的贪心策略,我们只要保证今天一天的收益最高就行,而不用管后面几天是否能赚最多钱,因为最优情况也被保存在dp数组里,在后面的dp中会被使用并传递。

所以结论是:该背包最重要的状态就是手里的钱,因为它能保存住整体的最优情况在该日的策略,故这题的dp数组可以优化到一维。

不多说,上代码。

#include<iostream>
#include<cst
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值