设 fi,j 表示以 hi 结尾,公差为 j 的方案数。
一开始我自己写的转移是这样的:
for (int i = 1; i <= n; i++)
{
std::fill(f[i] + 1, f[i] + 40001, 1);
ans = (ans + 1) % MOD;
for (int j = 1; j < i; j++)
{
f[i][h[i] - h[j] + 20000] = (f[i][h[i] - h[j] + 20000] + f[j][h[i] - h[j] + 20000) % MOD;
ans = (ans + f[j][h[i] - h[j] + 20000]) % MOD;
}
}
然后看到题解区是这样:
ans = n;
for (int i = 1; i <= n; i++)
for (int j = 1; j < i; j++)
{
f[i][h[i] - h[j] + 20000] = (f[i][h[i] - h[j] + 20000] + f[j][h[i] - h[j] + 20000] + 1) % MOD;
ans = (ans + f[j][h[i] - h[j] + 20000] + 1) % MOD;
}
两种方法都过了,但是第二种当中的 +1 如何理解?