抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

传送门

首先,大家都可以看出来,这道题是一个多重背包,设f(i)f(i)为和为ii可不可行,那么假设kk{an}\{a_n\}中的一个数,且f(s)==1f(s)==1,我们把f(s+k×1)f(s+k \times 1)f(s+k×2)f(s+k \times 2)f(s+k×3)f(s+k \times 3),…都设为11

但是,作为一个不知道高到哪里去的膜法师,你发现这样子搞太NaiveNaive了,这样要做无穷次,而且得出来的数s+k×1,s+k×2,s+k×3s+k \times 1 , s+k \times 2,s + k \times 3取值范围也是正无穷,于是,你决定给它取一个膜,假设我们膜的是haha

发现s+k×(i+ha)==s+k×i(modha)s+k \times {(i+ha)} == s+k \times i (\mod ha),所以连的边最多haha条,取值范围也变成[0,ha)[0,ha),你不禁叫了一声:

吼啊!

如图:

于是,此题的具体思路就有了,我们对于每一个s[0,ha)s \in [0,ha)建立一个点,把ss(s+a[i])modha(s+a[i]) \mod ha连一条边,边权为a[i]a[i],从s=0s=0跑最短路,得到distdist数组。

考虑差分得出[L,R][L,R]BB有多少种取值,

评论