您的位置:首页 > 其它

【GDOI 2016模拟3.16】图计数

2016-03-16 16:19 274 查看

问题描述

记nn的正整数拆分方案数为fnf_n,求mfn(mod999999599)m^{f_n}\pmod {999999599}

n,m≤105n, m\leq 10^5

分析

首先一个很重要的地方就是幂应该要对φ(mod)\varphi (mod)取模。

然后就是怎么算正整数拆分。

其实这个本质上是一个完全背包问题,其中物体的重量为11到nn。

考虑重量小于于n−−√\sqrt{n}的物体只有n−−√\sqrt{n}个,重量大于等于n−−√\sqrt{n}的物体只会选n−−√\sqrt{n}个。

那么分开处理,然后合并背包即可。

part1

记fi,jf_{i, j}表示前ii个物体,已加入重量为jj,简单DPDP即可。

part2

记gi,jg_{i, j}表示已经加入了ii个物品,重量为jj。

那么这里这样子转移。

gi,j=gi−1,j−⌈n√⌉+gi,j−ig_{i, j}=g_{i-1, j-\lceil \sqrt{n} \rceil} + g_{i, j-i}

其中加号以前表示加入一个重量为⌈n−−√⌉\lceil \sqrt{n} \rceil的物体,以后的部分表示将之前加入的物体的重量全部加一。

剩下就是合并背包了。

时间复杂度O(nn−−√)O(n\sqrt n)

空间复杂度O(n)O(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: