用户输出
2
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#116926 | #1471. [L2-1] 称名目题 | Accepted | 100 | 188 ms | 8228 K | C++ / 1.6 K | 青春猪头蒟蒻会梦到 0d000721吗 | 2025-04-17 1:03:48 |
#include <bits/stdc++.h>
#define MOD 19491001
using namespace std;
int n, d, k, ans = 0;
int dp0[1010][1010] = { 0 }, dp1[1010][1010] = { 0 };
int main() {
cin >> n >> k >> d;
for (int i = 0; i <= n; i++) dp0[0][i] = 1;
for (int l = 1; l <= n; l++) {
for (int i = 1; i <= n; i++) {
if (i < d) {
dp0[l][i] = (dp0[l][i - 1] + dp0[l - 1][i - 1]) % MOD;
} else if (i > d) {
int mi = min(i, k);
if (mi != i)
dp0[l][i] = (dp0[l][i - 1] + dp0[l - 1][i - d - 1] + dp0[l - 1][i - 1] -
dp0[l - 1][i - d] - dp0[l - 1][i - mi - 1] + MOD) %
MOD;
else
dp0[l][i] = (dp0[l][i - 1] + dp0[l - 1][i - d - 1] + dp0[l - 1][i - 1] -
dp0[l - 1][i - d] + MOD) %
MOD;
} else {
dp0[l][i] = (dp0[l][i - 1] + dp0[l - 1][i - 1] - dp0[l - 1][i - d] + MOD) % MOD;
}
if (min(i, k) != i)
dp1[l][i] = (dp1[l][i - 1] + dp1[l - 1][i - 1] - dp1[l - 1][i - min(i, k) - 1]) % MOD;
else
dp1[l][i] = (dp1[l][i - 1] + dp1[l - 1][i - 1]) % MOD;
if (i > d)
dp1[l][i] = ((dp0[l - 1][i - d] - dp0[l - 1][i - d - 1]) + dp1[l][i]) % MOD;
else if (i == d)
dp1[l][i] = ((dp0[l - 1][i - d]) + dp1[l][i]) % MOD;
// cout<<i<<' '<<dp0[l][i]<<' '<<dp1[l][i]<<endl;
}
ans += (dp1[l][n - 1] - dp1[l][n - 2] + MOD) % MOD;
ans %= MOD;
// for(int i=0;i<=n-1;i++){
// cout<<dp0[0]<<' ';
// }
// cout<<endl;
// for(int i=0;i<=n-1;i++){
// cout<<dp1[0]<<' ';
// }
// cout<<endl;
// cout <<l<<' '<< ans<<endl;
}
cout << ans;
}