2022.7.18 闲话
看一本 DK 科普书籍中的完全背包题,口胡一波生成函数还胡错了(忘取倒数 QAQ)
Problem 1
题目来源:EI 群 .
对于 ,问什么样的 能使得 的大正方形可以划分为若干个 和 的小正方形(各至少一个,且必须是正着摆,不能倾斜).
答案: 且 .
必要性显然 .
充分性证明如下:
对 行 列位置赋值 ,则所有小正方形权值和为 (因为单位根事循环的),从而大正方形权值和为 .
然后提一下公因式即得 且 .
证毕 .
Problem 2
给一个正整数 ,求:
.
结论: 当且仅当存在 , 使得 .
证明可以考虑数学归纳法(确信).
Problem 3
有若干个二元组 ,定义一组二元组的特征值为 之和,价值为 之和 .
维护一个双端队列,支持:
IF w v
,在开头插一个二元组 .IG w v
,在末尾插一个二元组 .DF w v
,弹开头的二元组 .DG w v
,弹末尾的二元组 .QU w v
,选取若干二元组,令其特征值为 ,使得存在一个 ,最大化价值,只需输出最大的价值 .强制在线 .
, .
用两个栈模拟一下双端队列 .
维护两个栈 和 ,在开头和结尾插入删除就直接在这两个栈中分别 push
和 pop
.
如果出现删除时某个栈空了,那么直接暴力重构这两个栈使得这两个栈大小之差最小 .
设 为两栈的大小之差,那么一次正常的插入删除只会让 变化 ,而重构平均分配的操作会用 的复杂度使 变成 或 ,于是均摊时间复杂度是 的 .
注意到要维护的一个东西是背包,于是考虑怎么在栈上维护背包 .
考虑 DP,求答案时维护一个数组 表示 中 DP 值的最大值,查的时候枚举选的个数然后分讨一下求 max 即可 .
这部分可以滑动窗口 .
于是时间复杂度 .
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16491530.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】