已 AC,但对转移方程的疑惑
  • 板块P4933 大师
  • 楼主lzy20091001
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/14 11:00
  • 上次更新2024/4/14 13:40:37
查看原帖
已 AC,但对转移方程的疑惑
932039
lzy20091001楼主2024/4/14 11:00

设 fi,jf_{i, j} 表示以 hih_i 结尾,公差为 jj 的方案数。

一开始我自己写的转移是这样的:

for (int i = 1; i <= n; i++)
{
    // 数列只有只有 h[i] 一项
    std::fill(f[i] + 1, f[i] + 40001, 1);
    ans = (ans + 1) % MOD;

    // 不止 h[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) % 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 如何理解?

2024/4/14 11:00
加载中...