题解 CF118D 【Caesar's Legions】
题目意思
凯撒大帝喜欢让他的士兵列队。假设他的军队有
状态转移方程
队列里已有
显然
我们可以想出状态转移方程式
Code
const int N = 100 + 5;
const int K = 10 + 5;
int n, m, k1, k2, f[N][N][K][K];
int main () {
read (n); read (m); read (k1); read (k2);
f[0][0][0][0] = 1;
for (int i = 0; i <= n; i ++ ) {
for (int j = 0; j <= m; j ++ ) {
for (int k = 1; k <= min (k1, i); k ++ ) Add (f[i][j][1][0], f[i][j - 1][0][k]);
for (int k = 1; k <= min (k2, j); k ++ ) Add (f[i][j][0][1], f[i - 1][j][k][0]);
for (int k = 1; k <= min (k1, i); k ++ ) Add (f[i][j][0][k], f[i - 1][j][0][k - 1]);
for (int k = 1; k <= min (k2, j); k ++ ) Add (f[i][j][k][0], f[i][j - 1][k - 1][0]);
}
}
int ans = 0;
for (int i = 1; i <= k2; i ++ ) Add (ans, f[n][m][i][0]);
for (int i = 1; i <= k1; i ++ ) Add (ans, f[n][m][0][i]);
cout << ans << endl;
return 0;
}