Submission #1305406

#TimeUsernameProblemLanguageResultExecution timeMemory
1305406petezaZapina (COCI20_zapina)C++20
110 / 110
111 ms3372 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9+7;

int n;
ll dp[355][355][2];
ll ck[355][355];

ll cnk(int a, int b) {
	return ck[a][b];
}

int main() {
	// your code goes here
	for(int i=0;i<355;i++) {
		ck[i][0] = 1;
		for(int j=1;j<=i;j++) {
			ck[i][j] = ck[i-1][j] + ck[i-1][j-1];
			ck[i][j] %= mod;
		}
	}
	cin >> n;
	//memset(dp, -1, sizeof dp);
	memset(dp, 0, sizeof dp);
	dp[0][0][0]=1;
	for(int i=1;i<=n;i++) {
		for(int j=0;j<=n;j++) {
			for(int k=0;k<=j;k++) {
				if(j-k==i) {
					dp[i][j][1] += dp[i-1][k][0]*cnk(n-k, j-k);
					dp[i][j][1] += dp[i-1][k][1]*cnk(n-k, j-k);
					//dp[i][j][1] %= mod;
				} else {
					dp[i][j][0] += dp[i-1][k][0]*cnk(n-k, j-k);
					dp[i][j][1] += dp[i-1][k][1]*cnk(n-k, j-k);
					dp[i][j][0] %= mod;
				}
				dp[i][j][1] %= mod;
			}
		}
	}
	cout << dp[n][n][1];
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...