Link
题意大概就是求Bl,Br范围内B的个数使等式
存在非负整数解。其实转化一下题意也就是
在N种物品中任意选择,物品有一个价值,使得最后的总价值处于给定区间内。
这很显然是一个完全背包,而且是类似于一种模板题,但是这道题的数据范围是B≤1012,因此这么做显然是不行的,但是我们可以从完全背包的视角出发思考题目。
我们取出最小的a为amin,并且假设我们现在知道了一种方案,物体的总重为D[i],并且满足K mod amin=i,在这两种条件下D[i]为最小值。
那么显然,对于任意一个同样满足上述两个条件的总重X,X≤D[i],并且因为X mod amin=D[i] mod amin,所以可以知道X方案可以由D[i]方案加上若干个amin得到。
现在我们考虑加入一个物体Now,那么有
可以从d[i]+Now而来。于是可以考虑从i向(i+Now) mod amin连一条比边权为Now的边,而求D[i]的最小值也就被转化成了最短路问题。
那么算法就得出来了:
- 首先求一下amin的最小值保存下来。
- 跑最短路,预处理出D数组。
- 枚举所有的D,计算mod T = i的数在区间Bl,Br中有多少个。
1 |
|
这种在求解用{ai}能组成多少个在Bl,Br范围内的数的问题其实是很经典的图论问题,像这种建图困难,但是最短路很好跑的题目便可以称为是建图题了。
v1.5.2