Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- using namespace __gnu_pbds;
- using namespace std;
- typedef long long int lli;
- #define ff first
- #define ss second
- #define pb push_back
- #define mp make_pair
- #define pii pair<lli,lli>
- #define vi vector<lli>
- #define mii map<lli,lli>
- #define pqb priority_queue<lli>
- #define pqs priority_queue<lli,vi,greater<lli> >
- #define setbits(x) __builtin_popcountll(x)
- #define zrobits(x) __builtin_ctzll(x)
- #define mod 1000000007
- #define inf 1e18
- #define ps(x,y) fixed<<setprecision(y)<<x
- #define mk(arr,n,type) type *arr=new type[n];
- #define w(x) lli x; cin>>x; while(x--)
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- #define ONLINE_JUDGE
- typedef tree<lli, null_type, less<lli>, rb_tree_tag, tree_order_statistics_node_update> pbds;
- void zanj0()
- {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- }
- lli b, g, n1, n2;
- lli x, y;
- lli n;
- lli add(lli a, lli b) {
- return ((a % mod) + (b % mod)) % mod;
- }
- lli help(lli b, lli g, lli n1, lli n2, vector < vector < vector < vector <lli> > > >& dp) {
- if (b == g && b == 0) return 1;
- if (dp[b][g][n1][n2] != -1) return dp[b][g][n1][n2];
- lli ret = 0;
- if (b > 0 && n1 > 0) {
- ret = add(ret, help(b - 1, g, n1 - 1, y, dp));
- }
- if (g > 0 && n2 > 0) {
- ret = add(ret, help(b, g - 1, x, n2 - 1, dp));
- }
- return dp[b][g][n1][n2] = ret;
- }
- void solve() {
- cin >> b >> g >> n1 >> n2;
- x = n1;
- y = n2;
- n = b + g;
- vector < vector < vector < vector <lli> > > > dp(b + 1, vector < vector < vector <lli> > >(g + 1, vector < vector < lli > >(n1 + 1, vector <lli> (n2 + 1, -1))));
- cout << help(b, g, n1, n2, dp) << endl;
- }
- int main()
- {
- zanj0();
- solve();
- return 0;
- }
Add Comment
Please, Sign In to add comment