AC

许诺  •  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;

}


评论:

请先登录,才能进行评论