#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100;
const long long MOD = 1e9 + 7;
int n, d, a[MAXN];
long long dp[30][1 << 20], answer;
vector<int> graph[MAXN];
void input();
void generateGraph();
void countLenNP();
int main() {
input();
generateGraph();
countLenNP();
cout << answer % MOD << endl;
}
void input() {
cin >> n >> d;
for (int i = 0; i < n; i++)
cin >> a[i];
}
void generateGraph() {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (a[i] - a[j] >= -d)
graph[i].push_back(j);
}
void countLenNP() {
for (int v = 0; v < n; v++)
dp[v][1 << v] = 1;
for (int mask = 1; mask < (1 << n); mask++)
for (int v = 0; v < n; v++) {
if (!(mask & (1 << v)))
continue;
for (int u : graph[v]) {
if (mask & (1 << u))
continue;
dp[u][mask | (1 << u)] += dp[v][mask] % MOD;
dp[u][mask] %= MOD;
}
}
for (int mask = 1; mask < (1 << n); mask++)
if (__builtin_popcount(mask) == n)
for (int v = 0; v < n; v++) {
answer += dp[v][mask];
answer %= MOD;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |