dp法 我只能凑出答案?不能用正常方法得出答案,请问哪里错了?
查看原帖
dp法 我只能凑出答案?不能用正常方法得出答案,请问哪里错了?
1023600
ShelpAm楼主2024/1/18 20:50

我在代码里用注释标出了两个修改地,请大佬看看我哪里细节错了,导致修改前的得不出答案!谢谢了!

修改之前的:

static inline auto solve_case()
{
  size_t n, m;
  cin >> n >> m;
  vec2uz f(n + 1, m + 1);
  // 差在了这里A
  f[0][0] = 1;
  for (size_t j{}; j != m + 1; ++j) {
    for (size_t i{}; i != n + 1; ++i) {
      if (j >= 2) {
        if (i >= 1) {
          f[i][j] += f[i - 1][j - 2];
        }
        if (i + 1 < n) {
          f[i][j] += f[i + 1][j - 2];
        }
      }
      if (j >= 1) {
        if (i >= 2) {
          f[i][j] += f[i - 2][j - 1];
        }
        if (i + 2 < n) {
          f[i][j] += f[i + 2][j - 1];
        }
      }
    }
  }
  return f[n][m];// 差在了这里B
}

这是修改之后的:

static inline auto solve_case()
{
  size_t n, m;
  cin >> n >> m;
  ++n; // 差在了这里A
  vec2uz f(n + 1, m + 1);
  f[0][0] = 1;
  for (size_t j{1}; j != m + 1; ++j) {
    for (size_t i{}; i != n + 1; ++i) {
      if (j >= 2) {
        if (i >= 1) {
          f[i][j] += f[i - 1][j - 2];
        }
        if (i + 1 < n) {
          f[i][j] += f[i + 1][j - 2];
        }
      }
      if (i >= 2) {
        f[i][j] += f[i - 2][j - 1];
      }
      if (i + 2 < n) {
        f[i][j] += f[i + 2][j - 1];
      }
    }
  }
  return f[n - 1][m]; // 差在了这里B
}
2024/1/18 20:50
加载中...