社区讨论
处理为泛化物品的一个做法(未实现)求大佬过目
P1064[NOIP 2006 提高组] 金明的预算方案参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mi6hd41q
- 此快照首次捕获于
- 2025/11/20 04:54 4 个月前
- 此快照最后确认于
- 2025/11/20 04:54 4 个月前
看了九讲的泛化物品之后想出的一个做法,不能说完全理解,但还是有这样的一点个人看法吧。
1,按照物品组处理为多个泛化物品
既然有主件和附件之分,选附件必须要选主件,那么也就是说,可以把整个物品组看成一个泛化物品,当分配给它的价值小于主件所需价值时,反馈价值为0。当超过主件价值时,反馈价值至少为主件的反馈价值。而在分配价值逐渐上升的时候,会发现达到主件加上某个附件的价值,继续上升就出现了矛盾,到底选择哪个附件才是最优方案?只需取当前价值下的max即可。分配价值不断上升而不因前面被置成不同物品而不同。
【举个栗子】
有这样一个物品组:(v,p)
主件:200 4 附件1:100 3 附件2:150 3
设f[i]表示分配给这个物品组i价值时能得到的最大反馈。
那么显然,f[0..199]=0,f[200..299]=800,f[300..349]=1100,f[350..449]=1250,f[450..n]=1550。
2,计算所有泛化物品的和
弱弱的说一句具体我也并不很懂
由于两个泛化物品的和为:“如果给定了两个泛化物品 h 和 l ,要用一定的费用从这两个泛化物品中得到最大的价值,这个问题怎么求呢?事实上,对于一个给定的费用 v ,只需枚举将这个费用如何分配给两个泛化物品就可以了。同样的,对于 0...V 中的每一个整数 v ,可以求得费用 v 分配到 h 和 l 中的最大价值 f(v) 。也即
f(v) = max {h(k) + l(v − k) | 0 ≤ k ≤ v}”(引自背包九讲O(v2),这里讲的很清楚,我自己写肯定讲不清楚orz)
那么只需要不断地累加这些泛化物品(可以用一个ans,从1到物品组数去加,最后输出),就可以求出这个问题最后的答案。这样的话,面对附件更多的问题就可以有这样一个通用的解法,而不用去枚举方案。
以上皆为个人观点,欢迎大佬们批评指正!如果有什么讲的不明白的地方也欢迎留言交流!
回复
共 7 条回复,欢迎继续交流。
正在加载回复...