Description
选择不超过K个N以内的正整数乘起来,使得乘积是一个无平方因子数,有多少种取法?(每个数只能取一次)
无平方因子数x满足
μ(x)!=0
对于70%的数据:N≤30;
对于100%的数据:1≤T≤5;1≤K≤N≤500。
70%
这档很简单,直接用
f[i][j][s]
表示选到第
i
个数,共选了
100%
考虑对70分的dp进行优化
可以发现,对于较大的质因子,它在一个数中出现的次数很少
具体而言,当
如果我们将每个数按最大的质因子分组,那么每个组里面至多选一个数
这样分组来dp,就可以把大于根号n的那些二进制状态省掉了
注意,直接这样做可能会比较慢
注意i<=306(500以内无平方因子数个数),j<=96(500以内不同质数个数)
这样复杂度就很有保障了