2022“杭电杯”中国大学生算法设计超级联赛(1)1003 Backpack 题解
2022“杭电杯”中国大学生算法设计超级联赛(1)1003 Backpack 题解
关于我对这题看法:这题考察的算法是动态规划dp,当时开场1小时就有100多支队伍出来,然后我去开这题,
20多分钟就做出来了,所以当时我就以为这大概就是签到题,但是即使5小时结束后,
这题通过队伍数也才200多(大概接近铜牌题了qwq),所以这题有一个特点,就是考察dp的硬知识,
不会就是不会,如果不擅长dp的话想满5个小时也不一定能做出来,而最快的队伍甚至有不到5分钟就切掉的,所以这题是真的只有会和完全不会的。
接下来介绍一种我当时的做法,和题解不同。
1|0题意
给你一个容量为的背包和个物品,每个物品有体积和价值,求恰好装满背包时物品总的异或和最大值。
2|0思路
这道题显然一眼背包,只是把加换成了异或,所以就不能用背包的转移做法了,要换思路,但本质还是
先介绍官方题解的思路,是,复杂度,其中表示权值和为,体积和为的方案是否存在,
然后体积加变成,用去压位表示异或的状态,可以优化复杂度,否则会超时。具体的实现就不详细介绍了。
然后介绍一下我当时的做法。
总的思路是二维01背包
首先拿到这种背包题,我的第一个想法就是设状态,然后列状态转移方程,但是普通的01背包只有1维,并且在异或的时候,
当前状态的最大值并不能保留到最后,当前状态不是最大值也可能最后成为最大值,这与01背包的求和相加不同,所以我的想法是给01背包增加一维。
用f[i][j]表示恰好装满i体积背包第j种情况的异或值,同时增加一个数组用来记录装满体积背包的情况种数,
这样就可以枚举每种情况来转移状态,对于每种情况,状态转移方程如下
^
其中表示的是装满容量第种情况,是枚举情况的参数,然后取最大值即可。
3|0代码
__EOF__

本文链接:https://www.cnblogs.com/carnation13/p/16508399.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~