Submission #816915

#TimeUsernameProblemLanguageResultExecution timeMemory
816915MohamedAhmed04Tents (JOI18_tents)C++14
100 / 100
79 ms35576 KiB
#include <bits/stdc++.h>

using namespace std ;

const int mod = 1e9 + 7 ;

int Add(int x , int y)
{
	int z = x + y ;
	if(z >= mod)
		z -= mod ;
	return z ;
}

int Sub(int x , int y)
{
	int z = x - y ;
	if(z < 0)
		z += mod ;
	return z ;
}

int Mul(int x , int y)
{
	return (1ll * x * y) % mod ;
}

const int MAX = 3000 + 10 ;

int arr[MAX] ;
int n , m ;

int dp[MAX][MAX] ;

int main()
{
	ios_base::sync_with_stdio(0) ;
	cin.tie(0) ;
	cin>>n>>m ;
	for(int i = 0 ; i <= max(n , m) ; ++i)
		dp[0][i] = dp[i][0] = 1 ;
	for(int i = 1 ; i <= n ; ++i)
	{
		for(int j = 1 ; j <= m ; ++j)
		{
			dp[i][j] = Add(dp[i-1][j] , Mul(dp[i-1][j-1] , 4*j)) ;
			if(j >= 2)
				dp[i][j] = Add(dp[i][j] , Mul(dp[i-1][j-2] , j * (j-1) / 2)) ;
			if(i >= 2)
				dp[i][j] = Add(dp[i][j] , Mul(dp[i-2][j-1] , (i-1) * j)) ;
		}
	}
	return cout<<Sub(dp[n][m] , 1)<<"\n" , 0 ;
}		
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...