이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |