結果

提出番号 1448
提出者 square1001
言語 C++
提出日時 2018-08-04 12:15:46
問題名 (64)Or Plus Max 2
結果 TLE
点数 10%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 1ms 8736KB
2 AC 100% 2ms 8400KB
3 AC 100% 2ms 8304KB
4 AC 100% 4ms 8352KB
5 AC 100% 4ms 8272KB
6 AC 100% 4ms 8064KB
7 AC 100% 2ms 8416KB
8 AC 100% 2ms 8432KB
9 AC 100% 4ms 8400KB
10 AC 100% 2ms 8192KB
11 AC 100% 4ms 8112KB
12 AC 100% 3ms 8336KB
テストケース 結果 得点 実行時間 メモリ使用量
13 TLE 0% 20002ms 0KB
14 TLE 0% 20002ms 0KB
15 TLE 0% 20001ms 0KB
16 TLE 0% 20001ms 0KB
17 TLE 0% 20001ms 0KB
18 TLE 0% 20001ms 0KB
19 TLE 0% 20002ms 0KB
20 TLE 0% 20002ms 0KB
テストケース 結果 得点 実行時間 メモリ使用量
21 TLE 0% 20002ms 0KB
22 TLE 0% 20002ms 0KB
23 TLE 0% 20002ms 0KB
24 TLE 0% 20002ms 0KB
25 TLE 0% 20001ms 0KB
26 TLE 0% 20001ms 0KB
27 TLE 0% 20002ms 0KB
28 TLE 0% 20002ms 0KB
29 TLE 0% 20002ms 0KB
30 TLE 0% 20002ms 0KB
テストケース 結果 得点 実行時間 メモリ使用量
31 TLE 0% 20002ms 0KB
32 TLE 0% 20002ms 0KB
33 TLE 0% 20002ms 0KB
34 TLE 0% 20002ms 0KB
35 TLE 0% 20002ms 0KB
36 TLE 0% 20002ms 0KB
37 TLE 0% 20001ms 0KB
38 TLE 0% 20002ms 0KB
39 TLE 0% 20002ms 0KB
40 TLE 0% 20002ms 0KB
41 TLE 0% 20001ms 0KB

ソースコード

#include <vector>
#include <iostream>
using namespace std;
const int mod = 1000000007;
int N, K, D, P, comb[15][15];
int solve(int dep, int sum, vector<int> v) {
	if (dep == N) return sum == K;
	int vs = 0, ret = 0;
	for (int i = (int)v.size() - 1; i >= -1; --i) {
		for (int j = 1; j <= D - vs; ++j) {
			vector<int> w(v.begin() + (i + 1), v.end());
			w.push_back(j);
			int mul = comb[D - vs][j] - (i >= 0 ? comb[D - vs - v[i]][j] : 0);
			int res = solve(dep + 1, sum + w.size(), w);
			ret = (ret + 1LL * mul * res) % mod;
		}
		if(i >= 0) vs += v[i];
	}
	return ret;
}
int main() {
	cin >> N >> K >> P;
	while (1 << D < P) ++D;
	for (int i = 0; i <= D; ++i) {
		comb[i][0] = 1;
		for (int j = 1; j <= i; ++j) {
			comb[i][j] = comb[i - 1][j] + comb[i - 1][j - 1];
		}
	}
	int ret = solve(0, 0, vector<int>());
	cout << ret << '\n';
	return 0;
}