10
本文拥有MACW07,アイドル(作者曰:致敬传奇排位出题王),SJZ08和AC君的点赞,含金量极高,确定不来看看吗?
-1.在这篇文章之前
01背包,相信大家都会(不会请自学)。
然而,在アイドル的排位赛中,总有那么几道01背包,在模板上加一些奇妙的东西使其变得非常不可读
所以,饱受火星背包折磨的我,将做出此文,为抵抗01变式做出贡献
0.前置知识
01背包,众所周知,不会就去上网学
1.最初的起点——01背包模板
01背包第一形态:模板形态
【背包】01背包(优化)
题目描述
一个旅行者有一个最多能装 C 的背包,现在有 n 件物品,它们的重量分别是 w1,w2,...,wn,w_1,w_2,...,w_n,w1 ,w2 ,...,wn ,它们的价值分别为v1,v2,...,vn,v_1,v_2,...,v_n,v1 ,v2 ,...,vn ,每件物品都可以选择装入背包或者不装入,求旅行者能获得最大总价值。
输入格式
第 1 行:两个整数,C (背包容量,0 < C ≤ 30000) 和 N (物品数量,0 < N ≤ 10000);
第 2~N+1行:每行二个整数 wi,viw_i,v_iwi ,vi ,表示每个物品的重量和价值。
输出格式
仅一行,一个数,表示最大总价值。
样例 #1
样例输入 #1
样例输出 #1
经典01背包,当然要套最经典的模板
复杂度也是经典的O(nm)
CODE:
2.当N开始变小的时候
当n开始变小的时候,就说明你要做火星背包全家桶了
火星背包I
01背包第二形态:N小余极形态
这题观察到我们的wi,vi,mw_i,v_i,mwi ,vi ,m都特别大,显然最终的时间复杂度肯定只能带n了
咋办??
不急,是时候掏出黑科技——折半搜索了(选学,因为我也不懂)
时间复杂度为O(2n2)O(2^{\frac{n}{2}})O(22n )
CODE:
火星背包II
01背包第三形态:火星式逆转形态
这题一看n和viv_ivi 都小,其余的我们承受不住。所以显然时间复杂度显然只能带n和viv_ivi 。
不妨想一下,你n和viv_ivi 都小,我们是不是可以反过来,直接枚举最后的答案然后判断答案是否可行呢?
这么一思索,脑子里便能瞬间变出一个dp[i]呢(dp[i]指在想让最后价值变为i时的最小重量)
在思索一下,是不是dp[0]=0呢
这边界和公式都有了,接下来就交给代码了
时间复杂度为O(n∑i=1nvi)O(n\sum_{i=1}^nv_i)O(n∑i=1n vi ),最大1e8,勉强卡常过去
CODE
3.当N开始变大的时候
01背包第4形态:多重01形态
显然,你就要去写一些思维题了
这道题比较有价值,建议思考一下再看题解
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
题解:
1.直觉
你在刚看到这题的反应估计是:这不 01 背包模板题吗,为啥会在绿题?
于是,你就高高兴兴的把 01 背包的模板修改了一下,放了上去。
结果就会这样 。
也是在这时,你看到了数据:
n,m≤105n,m \le 10^5n,m≤105 。
所以说,这题用传统 01 背包的 O(nm)O(nm)O(nm) 还真做不出来。
然而正在你苦苦思索时,你一看 aia_iai 和 bib_ibi 的数据。
0≤ai,bi≤100\le a_i,b_i \le 100≤ai ,bi ≤10。
2.思路
aia_iai 和 bib_ibi 这么小,所有男家丁的状态最多只有 11×1111\times1111×11 多种,nnn 又很大,肯定会有重复的情况,于是我们就可以定义一个二维数组 sss 来保存当前状态的男家丁有多少个,这样子我们就得到了一个多重背包问题。
2.1二进制优化
然而普通多重背包的时间复杂度是 O(n×m×(背包个数))O(n \times m \times(背包个数))O(n×m×(背包个数)),显然是会超时间的。所以说还得用到二进制优化,把时间复杂度优化为 O(n×m×log2背包个数)O(n\times m \times \log_2背包个数)O(n×m×log2 背包个数)。
⋇\divideontimes⋇:这里的 nnn 最大为 10510^5105,mmm 最多为 11×1111\times1111×11, log2\log_2log2 (背包个数) 顶多也就 101010 多一点点地样子,开个O2时间勉强能卡过。
3.MYCODE\MATHBF{3.MYCODE}3.MYCODE :
//抄袭可耻!!!
4.探寻本质
看了这么多题目,相信你也发现了:
1.01变式最重要的就是挑软柿子捏,找到小的数据,根据这个想出对应的思路
2.没有小数据的背包一般都不在考背包
所以,“山重水复疑无路,柳暗花明又一村”,只要它还是背包,就一定是有一个比较简单的解的(火星背包I除外)。
5.结语
看到这里的,请按照以下操作进行:
1.@AC君:精选置顶
2.其他:点赞,评论(发个ding都行)
byebye~
有帮助,赞一个