```cpp
using namespace std;
inline int read()//快读
{
int ret=0;
char ch=getchar();
while(ch<‘0‘||ch>‘9‘) ch=getchar();
while(ch>=‘0‘&&ch<=‘9‘) ret=ret*10+ch-‘0‘,ch=getchar();
return ret;
}
int n,k;
int s[20];
long long dp[1<<20][20];
long long ans=0;
int main()
{
n=read(),k=read();
for(int i=1;i<=n;i++) s[i]=read();
for(int i=1;i<=n;i++) dp[1<<(i-1)][i]=1;//初始化
for(int i=1;i<(1<<n);i++)
{
if(!(i&(i-1))) continue;
for(int j=1;j<=n;j++)//遍历前一种情况并计算
if(i&(1<<(j-1)))
for(int l=1;l<=n;l++)
if(i&(1<<(l-1))&&abs(s[j]-s[l])>k)
dp[i][j]+=dp[i^(1<<(j-1))][l];
}
for(int i=1;i<=n;i++) ans+=dp[(1<<n)-1][i];
printf("%lld\n",ans);
}
洛谷 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 题解
原文:https://www.cnblogs.com/xiaoh105/p/12104553.html