和题解不太一样的做法。 我们设 表示以 为最后一个 的最小步数,得方程: 解释一下, 表示清空 之间的数字的步数, 是表示转化成 的代价。 可以进一步推导。 我们把 看作整体,发现其与 模 之后余数相同,所以考虑存一个数组 , 表示所有模 为 的位置 的 的最小值。 则我们可以 转移,时间复杂度为 。 当然这个做法有点多余。 #include<bits/stdc++.h> #define LL long long using namespace std; const LL N=1e5+5; LL n,d,a[N],sum[N],f[N],mn[N],...