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;
}

Download