首先,如果排列确定,那么就可以组合学解决了,不过排列数很多,显然不能枚举. 我们发现如果区间不能重叠的话,总长度减去所有区间长度就是能用的多余格子数. 然而相邻区间可以重叠较小区间一半的长度,因此这些长度就可以作为额外的多余格子! 因此,我们发现,确定排列的目的是确定有多少多余的格子能用. 考虑把魔法师按攻击范围从大到小排序,然后逐个插入 一开始有一个洞,每插一个可以减少一个洞.不变或增加一个洞(洞就表示还能再插) 令dp[i][j][k]表示现在插了i个,有j个洞,目前有k个额外的格子. 然后…