正确
#include<cstdio>
using namespace std;
const int mod = 12345678;
const int N = 150 + 5;
int n, m, k;
int f[N][N][25][25];
int min(int a, int b)
{
return a < b ? a : b;
}
int max(int a, int b)
{
return a > b ? a : b;
}
int ans;
int main()
{
scanf ("%d%d%d", &n, &m, &k);
f[0][0][0][0] = 1;
for (int i = 0;i <= n; i++)
for (int j = 0;j <= m; j++)
for (int l_b = 0;l_b <= k; l_b++)
for (int l_g = 0;l_g <= k; l_g++)
if (f[i][j][l_b][l_g])
{
f[i + 1][j][l_b + 1][max(l_g - 1, 0)] += f[i][j][l_b][l_g];
f[i + 1][j][l_b + 1][max(l_g - 1, 0)] %= mod;
f[i][j + 1][max(l_b - 1, 0)][l_g + 1] += f[i][j][l_b][l_g];
f[i][j + 1][max(l_b - 1, 0)][l_g + 1] %= mod;
}
for (int i = 0;i <= k; i++)
for (int j = 0;j <= k; j++)
{
ans += f[n][m][i][j];
ans %= mod;
}
printf ("%d", ans);
return 0;
}
错
#include<cstdio>
using namespace std;
const int mod = 12345678;
const int N = 150 + 5;
int n, m, k;
int f[N][N][25][25];
int min(int a, int b)
{
return a < b ? a : b;
}
int max(int a, int b)
{
return a > b ? a : b;
}
int ans;
int main()
{
scanf ("%d%d%d", &n, &m, &k);
f[0][0][0][0] = 1;
for (int i = 0;i <= n; i++)
for (int j = 0;j <= m; j++)
for (int l_b = 0;l_b <= k; l_b++)
for (int l_g = 0;l_g <= k; l_g++)
{
if (i != 0 && l_b != 0)
{
f[i][j][l_b][l_g] += f[i - 1][j][l_b - 1][l_g + 1];
f[i][j][l_b][l_g] %= mod;
}
if (j != 0 && l_g != 0)
{
f[i][j][l_b][l_g] += f[i][j - 1][l_b + 1][l_g - 1];
f[i][j][l_b][l_g] %= mod;
}
}
for (int i = 0;i <= k; i++)
for (int j = 0;j <= k; j++)
{
ans += f[n][m][i][j];
ans %= mod;
}
printf ("%d", ans);
return 0;
}
我觉得差不多 不知道第二种写法哪里错了
P2592