Between Two Arrays
問題
D – Between Two Arrays
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…
記録
- 2022/7/6 実装できず。
解法
- DP
コード例
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using P = pair<int, int>; #define rep(i, n) for(int i = 0; i < (n); ++i) // using mint = modint998244353; // using mint = modint1000000007; // const int mod = 1000000007; // const ll INF = 1LL << 62; // const int INF = 1001001001; const ll mod = 998244353; // 22:36 int main() { int N; cin >> N; ll mx = 0; vector<ll> a(N); rep(i, N) { cin >> a[i]; mx = max(a[i], mx); } vector<ll> b(N); rep(i, N) { cin >> b[i]; mx = max(b[i], mx); } vector<vector<ll>> dp(N+1, vector<ll>(3001)); dp[0][0] = 1; for(int i = 0; i <= N; ++i){ rep(j, mx) { dp[i][j + 1] += dp[i][j]; } if (i != N) { for(int j = a[i]; j <= b[i]; ++j) { dp[i+1][j] += dp[i][j]; dp[i+1][j] %= mod; } } } cout << dp[N][mx] % mod << endl; return 0; }