MIXUP2 - Đàn bò hỗn loạn
Tác giả: khuc_tuan
Ngôn ngữ: C++
#include <iostream>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
int a[22];
for(int i=0;i<n;++i) cin >> a[i];
long long *f[n];
for(int i=0;i<n;++i) {
f[i] = new long long[1<<n];
memset( f[i], 0, sizeof(long long) * (1<<n));
}
for(int i=0;i<n;++i) f[i][1<<i] = 1;
for(int bit=1;bit<(1<<n);++bit)
for(int last=0;last<n;++last) if((bit&(1<<last))!=0)
for(int l2=0;l2<n;++l2) if(l2!=last && (bit&(1<<l2))!=0 && abs(a[l2]-a[last])>k)
f[last][bit] += f[l2][bit ^ (1<<last)];
long long r = 0;
for(int i=0;i<n;++i) r += f[i][(1<<n)-1];
cout << r << endl;
return 0;
}