题目 | Distance Sequence
NOMURA Programming Contest 2022(AtCoder Beginner Contest 253)
E - Distance Sequence
https://atcoder.jp/contests/abc253/tasks/abc253_e
Time Limit: 2 sec / Memory Limit: 1024 MB
Score :
Problem Statement
How many integer sequences
Since the count can be enormous, find it modulo
Constraints
- All values in input are integers.
Input
Input is given from Standard Input in the following format:
Output
Print the count modulo
Sample Input 1
2 3 1
Sample Output 1
6
The following
Sample Input 2
3 3 2
Sample Output 2
2
The following
Sample Input 3
100 1000 500
Sample Output 3
657064711
Print the count modulo
我的笔记
很简单的一道 DP,令
暴力法时间复杂度为:
导致我 WA 半天写不出来的时本题比较隐蔽的坑:
若
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010, MAXM = 5010, MOD = 998244353;
int N, M, K;
long long dp[MAXN][MAXM];
long long ps[MAXM];
int main()
{
cin >> N >> M >> K;
for (int i = 1; i <= M; i++)
dp[1][i] = 1;
for (int i = 2; i <= N; i++)
{
memset(ps, 0, sizeof(ps));
for (int j = 1; j <= M; j++)
{
ps[j] = ps[j - 1] + dp[i - 1][j];
ps[j] %= MOD;
}
for (int j = 1; j <= M; j++)
{
if (K == 0)
{
dp[i][j] = ps[M];
continue;
}
if (j - K >= 1)
{
dp[i][j] += MOD + ps[j - K] - ps[0];
dp[i][j] %= MOD;
}
if (j + K <= M)
{
dp[i][j] += MOD + ps[M] - ps[j + K - 1];
dp[i][j] %= MOD;
}
}
}
long long ans = 0;
for (int i = 1; i <= M; i++)
{
ans += dp[N][i];
ans %= MOD;
}
cout << ans << endl;
return 0;
}
本文采用 CC BY-SA 4.0 许可,本文 Markdown 源码:Haotian-BiJi