一个结论

 


一个结论

rt

定义一个长度为 n 的序列 Aa1,a2,a3,,an ,表示有 aii

对于两个这样的序列 A,B ,如果他们满足

1、 |i=1naiii=1nbii|<n

2、 i=1nakiii=1nbkii(akiai,bkibi,i,aiaki or bibki)

那么有

i,ai<n,bi<n

证明:

此证明来自 int_R 和 9G

(upd:原:两者都意味着有一个长度 n 的区间的和,已改:两者都意味着有一个长度 ai 的区间的和)

我们考虑反证,假设 存在一个 i ,满足 ain ,我们将 B 序列展开,举个例子 , n=4,B=1,2,3,4 ,那么我们展开成为 B=(1,2,2,3,3,3,4,4,4,4) ,然后对 B(modai) 意义下做一个前缀和,只考虑前 ai 个位置,要么出现两个位置相同,要么出现一个位置是 0 ,两者都意味着有一个长度 ai 的区间的和 S0(modai) ,因为每个数 n ,所以 Sain ,同时在 A 中有 nai ,所以他们不满足第二条条件,否则一定有 B 的长度 <ai ,那么 B 中所有元素和 S(ai1)nA 中所有元素和 Kain ,所以 |SK|n ,不满足第一条性质,所以可以证明不存在 ain 的情况,得证。

想法来源

image

upd:数据范围

image

正解直接用决策单调性优化 DP 即可,有加强版 雅礼集训 2017 Day5」珠宝 /「NAIPC2016」Jewel Thief

但是场上想出了另外一种奇妙的方法,虽然当时不会证明:

首先我们按照平均值去贪心的选,然后就会出现这种情况:按照贪心,下一个应该选一个 bi=5 的物品,但是如果容量只剩下 1,2,3,4 呢,我们需要微调一下,相当于退几个物品,那几个物品,可以套用上面的结论,所以我们对每种 bi ,选出已经选了的 4 个最劣的并退掉,选出没选的 4 个最优的,放在一起跑个背包,一共选了 40 个物品,推掉了权值和为 60 的,所以最大容量只需要 64 即可,然后跑一个 4064 的背包,时间复杂度算出来有点小炸,但是常数很小,即使跑满了最大点也只用 430 ms ,可以过题。


其实最远古的想法是 P10961 划分大理石

同样可以优化到常数级别的背包。

posted @   lzrG23  阅读(86)  评论(14编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
点击右上角即可分享
微信分享提示