给你 nnn 个硬币,每个硬币面额 aia_iai ,有无限个,求能否拼成 qqq 组询问的面值 kik_iki 。
这道题直接 O(nm)(m=maxi=1nki)O(nm)(m=\max^{n} _{i=1} k_i)O(nm)(m=maxi=1nki) 完全背包过即可。
方程:fj=fj or fj−aif_j=f_j \,\,or \,\,\,\,f_{j-a_i} fj=fjorfj−ai
但是,蒟蒻有个小优化,时间复杂度会小于等于 O(nm) 的。
对于每个元素 aia_iai,在 aaa 数组中筛除它的倍数,显然,这样可以剪掉无用决策。
而最优可以达到 O(m)O(m)O(m),即有一个1.
最差还是 O(nm)O(nm)O(nm) ,即 aaa 数组两两互质。
求这个优化平均复杂度是多少?能快多少?