NOI Online
文章平均质量分 86
hbhcchen
我不是人
展开
-
[NOI Online #1 入门组] 跑步
本题就是正整数拆分问题,很容易想到一种O(n^2)的 DP:记 ,j表示用了前i个数和为j的方案数,那么=+,初始时=1 。这其实就是完全背包,但只能拿70分(也可能乱搞到80分)。那么怎么办呢?我们采用分块的思路,令m=,对于 i<m的数采用以上完全背包来求,这部分时间复杂度为。而对于大于等于m的数,采用另外一种 DP:记表示用了i个大于等于m的数和为j的方案数,那么,初始时=1。转移方程的第一项 表示在拆分序列中增加一个数m。 转移方...原创 2021-12-18 10:17:35 · 345 阅读 · 1 评论 -
[NOI Online #3 提高组] 优秀子序列
写一个复杂度的题解吧,思路简单一些,虽然复杂度高,但是能过。首先,我们把每一个数字看成是一个集合。每个数字可以写成二进制,那么看这个二进制形式中,从右往左的每个位置上的数字。如果第i位上是1,表示这个集合中有2^i2i,否则表示这个集合中没有2^i2i。这里i从0开始。下文中,我们用小写字母表示数字,对应的大写字母表示集合。举个例子,数字5对应成二进制是,那么把5看成是集合。数字9对应二进制是,表示。现在要求我们找到一个子序列,子序列中任意两个数字a和b,都满足a&b=0...原创 2021-12-18 10:26:41 · 368 阅读 · 1 评论