結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 2ms 8432KB
2 WA 0% 2ms 7808KB
3 WA 0% 2ms 8720KB
4 WA 0% 4ms 8112KB
5 WA 0% 4ms 8048KB
6 WA 0% 4ms 8448KB
7 WA 0% 2ms 8688KB
8 WA 0% 2ms 8416KB
9 AC 100% 4ms 8128KB
10 AC 100% 2ms 7984KB
11 WA 0% 4ms 8000KB
12 AC 100% 3ms 8704KB
テストケース 結果 得点 実行時間 メモリ使用量
13 TLE 0% 20001ms 0KB
14 TLE 0% 20002ms 0KB
15 TLE 0% 20001ms 0KB
16 TLE 0% 20002ms 0KB
17 TLE 0% 20002ms 0KB
18 TLE 0% 20002ms 0KB
19 TLE 0% 20002ms 0KB
20 TLE 0% 20002ms 0KB
テストケース 結果 得点 実行時間 メモリ使用量
21 TLE 0% 20001ms 0KB
22 TLE 0% 20001ms 0KB
23 TLE 0% 20002ms 0KB
24 TLE 0% 20002ms 0KB
25 TLE 0% 20002ms 0KB
26 TLE 0% 20002ms 0KB
27 TLE 0% 20001ms 0KB
28 TLE 0% 20002ms 0KB
29 TLE 0% 20002ms 0KB
30 TLE 0% 20002ms 0KB
テストケース 結果 得点 実行時間 メモリ使用量
31 TLE 0% 20002ms 0KB
32 TLE 0% 20001ms 0KB
33 TLE 0% 20001ms 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% 20001ms 0KB
40 TLE 0% 20001ms 0KB
41 TLE 0% 20002ms 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 <= D; ++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;
}