记录编号 600253 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016] 懵逼的队伍 最终得分 100
用户昵称 GravatarGalaxy 是否通过 通过
代码语言 C++ 运行时间 0.137 s
提交时间 2025-04-23 13:11:09 内存使用 5.30 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;

int N, K;
int S[20];
bool diff[20][20];
int dp[1 << 20][20];

#undef int
int main()
#define int long long
{
	freopen("mengbi.in","r",stdin);
	freopen("mengbi.out","w",stdout);
	cin >> N >> K;
	for (int i = 0; i < N; ++i) {
		cin >> S[i];
	}
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < N; ++j) {
			if (i != j && abs(S[i] - S[j]) > K) {
				diff[i][j] = true;
			}
		}
	}
	for (int i = 0; i < N; ++i) {
		dp[1 << i][i] = 1;
	}
	for (int k = 0; k < (1 << N); ++k) {
		for (int i = 0; i < N; ++i) {
			if (!(k & (1 << i))) continue;
			for (int j = 0; j < N; ++j) {
				if (k & (1 << j)) continue;
				if (diff[i][j]) {
					int temp = k | (1 << j);
					dp[temp][j] += dp[k][i];
				}
			}
		}
	}
	long long ans = 0;
	int res = (1 << N) - 1;
	for (int i = 0; i < N; ++i) {
		ans += dp[res][i];
	}
	cout << ans << endl;
	return 0;
}