제출 #1328903

#제출 시각아이디문제언어결과실행 시간메모리
1328903mat_jurAsceticism (JOI18_asceticism)C++20
24 / 100
799 ms80996 KiB
#include "bits/stdc++.h"
using namespace std;
#ifdef DEBUG
auto&operator<<(auto &o, pair<auto, auto> p) {o << "(" << p.first << ", " << p.second << ")"; return o;}
auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{"; for(auto e : x) o<<e<<", "; return o<<"}";}
#define debug(X) cerr << "["#X"]: " << X << '\n';
#else 
#define cerr if(0)cout
#define debug(X) ;
#endif
using ll = long long;
#define all(v) (v).begin(), (v).end()
#define ssize(x) int(x.size())
#define fi first
#define se second
#define mp make_pair
#define eb emplace_back

const int mod = 1'000'000'007;
int add(int a, int b) {
	a += b;
	return a >= mod ? a - mod : a;
}

int mul(int a, int b) {
	return int(((ll)a*b)%mod);
}

const int N = 301;
int dp[N][N][N];

int main() {
	ios_base::sync_with_stdio(false); cin.tie(nullptr);

	int n, k;
	cin >> n >> k;

	dp[0][0][0] = 1;
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j <= n; ++j) {
			for (int l = 0; l <= n; ++l) {
				if (dp[i][j][l] == 0) continue;
				dp[i+1][j][l] = add(dp[i+1][j][l], mul(dp[i][j][l], j));
				dp[i+1][j][l+1] = add(dp[i+1][j][l+1], mul(dp[i][j][l], j+1));
				dp[i+1][j+1][l] = add(dp[i+1][j+1][l], mul(dp[i][j][l], j+1));
				if (j) dp[i+1][j-1][l+1] = add(dp[i+1][j-1][l+1], mul(dp[i][j][l], j));
			}
		}
	}

	cout << dp[n][0][k] << '\n';
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...