2022.7.18 闲话

看一本 DK 科普书籍中的完全背包题,口胡一波生成函数还胡错了(忘取倒数 QAQ)


Problem 1

题目来源:EI 群 .

对于 gcd(a,b)=1,问什么样的 n 能使得 n×n 的大正方形可以划分为若干个 a×ab×b 的小正方形(各至少一个,且必须是正着摆,不能倾斜).

答案:anbn .

必要性显然 .

充分性证明如下:

ij 列位置赋值 ωaiωbj,则所有小正方形权值和为 0(因为单位根事循环的),从而大正方形权值和为 0 .

然后提一下公因式即得 anbn .

证毕 .

Problem 2

给一个正整数 n,求:

F(n)=(dnd)mod2

n<2128 .

结论:F(n)=1 当且仅当存在 rNkN+ 使得 n=2rk2 .

证明可以考虑数学归纳法(确信).

Problem 3

LOJ6515 贪玩蓝月

有若干个二元组 (w,v),定义一组二元组的特征值为 w 之和,价值为 v 之和 .

维护一个双端队列,支持:

  • IF w v,在开头插一个二元组 (w,v) .
  • IG w v,在末尾插一个二元组 (w,v) .
  • DF w v,弹开头的二元组 .
  • DG w v,弹末尾的二元组 .
  • QU w v,选取若干二元组,令其特征值为 s,使得存在一个 t[l,r],st(modp),最大化价值,只需输出最大的价值 .

强制在线 .

m50000p500 .

用两个栈模拟一下双端队列 .

维护两个栈 FG,在开头和结尾插入删除就直接在这两个栈中分别 pushpop .

如果出现删除时某个栈空了,那么直接暴力重构这两个栈使得这两个栈大小之差最小 .

w 为两栈的大小之差,那么一次正常的插入删除只会让 w 变化 1,而重构平均分配的操作会用 Θ(w) 的复杂度使 w 变成 01,于是均摊时间复杂度是 O(m) 的 .

注意到要维护的一个东西是背包,于是考虑怎么在栈上维护背包 .

考虑 DP,求答案时维护一个数组 ti,j 表示 [i,i+2j] 中 DP 值的最大值,查的时候枚举选的个数然后分讨一下求 max 即可 .

这部分可以滑动窗口 .

于是时间复杂度 O(mp) .

posted @   yspm  阅读(105)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示