我在代码里用注释标出了两个修改地,请大佬看看我哪里细节错了,导致修改前的得不出答案!谢谢了!
修改之前的:
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
}