Submission #770133

#TimeUsernameProblemLanguageResultExecution timeMemory
770133Ahmed57Tents (JOI18_tents)C++17
100 / 100
349 ms141712 KiB
#include <bits/stdc++.h> using namespace std; long long nCr(long long x){ return x*(x-1)/2; } long long n,m; long long dp2[3001][3001],dp[3001][3001]; long long mod = 1000000007; long long solve2(int i,int j){ if(i==0){ return 1; } if(dp2[i][j]!=-1)return dp2[i][j]; long long c1 = solve2(i-1,j); if(j>=1)c1+=(solve2(i-1,j-1)*4ll*j)%mod; c1%=mod; if(j>=2)c1+=(solve2(i-1,j-2)*nCr(j))%mod; c1%=mod; return dp2[i][j] = c1; } long long solve(int i,int j){ if(i==n){ int rem = n-((m-j)/2); return solve2(j,rem); //base caseeee } if(dp[i][j]!=-1)return dp[i][j]; long long c1 = solve(i+1,j); if(j>=2){ c1+=(solve(i+1,j-2)*nCr(j))%mod; }c1%=mod; return dp[i][j] = c1; } int main(){ cin>>n>>m; memset(dp,-1,sizeof dp); memset(dp2,-1,sizeof dp2); cout<<((solve(0,m)-1)%mod+mod)%mod; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...