Submission #314311

#TimeUsernameProblemLanguageResultExecution timeMemory
314311limabeansTents (JOI18_tents)C++17
100 / 100
538 ms71160 KiB
#include <bits/stdc++.h>
using namespace std;

template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl





using ll = long long;


const int maxn = 3001;
const ll mod = 1e9 + 7;

void add(ll& x, ll y) {
    if (x>=mod) x%=mod;
    if (y>=mod) y%=mod;
    x += y;
    if (x>=mod) x%=mod;
}

int n,m;
ll dp[maxn][maxn];

ll choose2(ll x) {
    return x*(x-1)/2;
}

ll f(int i, int j) {
    if (i==0 || j==0) return 1;
    ll &res = dp[i][j];
    if (~res) return res;
    res = 0;
    add(res, f(i-1,j));
    add(res, 4ll*j*f(i-1,j-1));
    if (j>=2) add(res, choose2(j)*f(i-1,j-2));
    if (i>=2) add(res, 1ll*j*(i-1)*f(i-2,j-1));

    return res;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0);  cout.tie(0);


    
    cin>>n>>m;
    memset(dp,-1,sizeof(dp));
    ll res = f(n,m);
    res--;
    res%=mod;
    res+=mod;
    res%=mod;
    cout<<res<<endl;    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...