This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |