Submission #1289701

#TimeUsernameProblemLanguageResultExecution timeMemory
1289701orzngaihaTents (JOI18_tents)C++20
100 / 100
1143 ms83168 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e4+5; const int MOD = 1e9+7; long long n,p[N],k,m,dp[N][N]; long long modulo(long long a,long long b) { long long r = 1; while(b) { if(b%2) r = (r*a)%MOD; a = (a*a)%MOD; b = b/2; } return r; } long long cc(int n,int k) { if(n < 0) return 0; long long x = p[n]; long long y = (p[n-k]*p[k])%MOD; return (x*modulo(y,MOD-2))%MOD; } int main() { cin>>n>>m; p[0] = 1; for(int i = 1;i <= max(n,m);i++) p[i] = (p[i-1]*i)%MOD; long long t = cc(m,2),ans = 0; dp[0][0] = 1; for(int i = 1;i <= n;i++) { for(int j = 0;j <= m;j++) { dp[i][j] = (dp[i][j] + dp[i-1][j])%MOD; dp[i][j+1] = (dp[i][j+1] + (dp[i-1][j]*(m-j)*4)%MOD)%MOD; dp[i][j+1] = (dp[i][j+1] + (dp[i-2][j]*(m-j)*(i-1))%MOD)%MOD; long long t = cc(m-j,2); if(j+2 <= m) dp[i][j+2] = (dp[i][j+2] + (dp[i-1][j]*t)%MOD)%MOD; } } for(int i = 1;i <= m;i++) { ans = (ans + dp[n][i])%MOD; } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...