许诺 • 9天前
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N, K;
cin >> N >> K;
vector<int> S(N);
for (int i = 0; i < N; ++i) {
cin >> S[i];
}
vector<vector<long long>> dp(1 << N, vector<long long>(N, 0));
for (int i = 0; i < N; ++i) {
dp[1 << i][i] = 1;
}
for (int mask = 0; mask < (1 << N); ++mask) {
for (int last = 0; last < N; ++last) {
if (!(mask & (1 << last))) continue;
if (dp[mask][last] == 0) continue;
// Try to add next cow not in mask.
for (int next = 0; next < N; ++next) {
if (mask & (1 << next)) continue;
if (abs(S[last] - S[next]) > K) {
dp[mask | (1 << next)][next] += dp[mask][last];
}
}
}
}
long long ans = 0;
int full_mask = (1 << N) - 1;
for (int last = 0; last < N; ++last) {
ans += dp[full_mask][last];
}
cout << ans << endl;
return 0;
}
评论:
请先登录,才能进行评论