Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <cstdio>
- #include <cstdlib>
- #include <set>
- #include <map>
- #include <unordered_set>
- #include <unordered_map>
- #include <ctime>
- #include <deque>
- #include <ctime>
- #include <string>
- #include <algorithm>
- #include <vector>
- #include <bitset>
- #include <cassert>
- #include <cstring>
- #include <queue>
- #define fi first
- #define se second
- #define ll long long
- #define pii pair<int, int>
- #define pil pair<int, long long>
- #define pli pair<long long, int>
- #define pll pair<long long, long long>
- #define mp(x, y) make_pair((x), (y))
- using namespace std;
- const ll MOD = 1000 * 1000 * 1000 + 7;
- const int MAXSZ = 5e5 + 100;
- ll stab(ll a) {
- return ((a % MOD + MOD) % MOD);
- }
- int main() {
- freopen("kebab.in", "r", stdin);
- freopen("kebab.out", "w", stdout);
- ios::sync_with_stdio(false);
- cout.tie(0); cin.tie(0);
- int n, t;
- cin >> n >> t;
- vector<vector<ll>> fdp(301, vector<ll>(301, 0));
- for (int i = 1; i < 301; ++i) {
- fdp[1][i] = 1;
- }
- for (int i = 2; i < 301; ++i) {
- for (int l = 2; l < 301; ++l) {
- for (int j = 1; j <= i - t - 1; ++j) {
- fdp[i][l] += fdp[j][l - 1];
- }
- fdp[i][l] = stab(fdp[i][l]);
- }
- }
- array<ll, MAXSZ> dp;
- int cur_s = 1;
- dp[0] = 1;
- for (int i = 0; i < n; ++i) {
- int q, x;
- cin >> q >> x;
- for (int j = cur_s; j < cur_s + q; ++j) {
- dp[j] = dp[j - 1];
- for (int l = cur_s; l <= j; ++l) {
- dp[j] += fdp[j - l + 1][q - x] * dp[max(0, min(cur_s - 1, l - t - 1))];
- dp[j] = stab(dp[j]);
- }
- }
- cur_s += q;
- }
- cout << dp[cur_s - 1] << endl;
- r
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement