传送门
首先,大家都可以看出来,这道题是一个多重背包,设f(i)为和为i可不可行,那么假设k为{an}中的一个数,且f(s)==1,我们把f(s+k×1),f(s+k×2),f(s+k×3),…都设为1
但是,作为一个不知道高到哪里去的膜法师,你发现这样子搞太Naive了,这样要做无穷次,而且得出来的数s+k×1,s+k×2,s+k×3取值范围也是正无穷,于是,你决定给它取一个膜,假设我们膜的是ha
发现s+k×(i+ha)==s+k×i(modha),所以连的边最多ha条,取值范围也变成[0,ha),你不禁叫了一声:
吼啊!
如图:
于是,此题的具体思路就有了,我们对于每一个s∈[0,ha)建立一个点,把s和(s+a[i])modha连一条边,边权为a[i],从s=0跑最短路,得到dist数组。
考虑差分得出[L,R]中B有多少种取值,