Submission #59562

#TimeUsernameProblemLanguageResultExecution timeMemory
59562theknife2001Tents (JOI18_tents)C++17
48 / 100
1511 ms222764 KiB
#include <bits/stdc++.h>

using namespace std;
const int N=305;
long long dp[N][N][N];
int n,m;
long long mod=1e9+7;

long long bt(int i, int j0, int j1)
{
    if(i==n)
    {
        if(j0==m||j1!=0)
            return 0;
        return 1;
    }
    if(dp[i][j0][j1]!=-1)
        return dp[i][j0][j1];
    long long x=bt(i+1,j0,j1);
    x%=mod;
    if(j0)
        x+=bt(i+1,j0-1,j1+1)*j0+bt(i+1,j0-1,j1)*j0*4;
    x%=mod;
    if(j1)
        x+=bt(i+1,j0,j1-1)*j1;
    x%=mod;
    if(j0>1)
        x+=(bt(i+1,j0-2,j1)*j0*(j0-1))/2;
    x%=mod;

    dp[i][j0][j1]=x;
    return x;
}


int main()
{
    cin>>n>>m;
    memset(dp,-1,sizeof dp);
    cout<<bt(0,m,0)<<endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...