[USACO08NOV]奶牛混合起来Mixed Up Cowsios
约翰家有N头奶牛,第i头奶牛的编号是Si,每头奶牛的编号都是惟一的。这些奶牛最近 在闹脾气,为表达不满的情绪,她们在挤奶的时候必定要排成混乱的队伍。在一只混乱的队 伍中,相邻奶牛的编号之差均超过K。好比当K = 1时,1, 3, 5, 2, 6, 4就是一支混乱的队伍, 而1, 3, 6, 5, 2, 4不是,由于6和5只差1。请数一数,有多少种队形是混乱的呢?spa
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #define ll long long using namespace std; const int N=16; int n,K,a[N]; ll f[100010][N],ans; int main() { cin>>n>>K; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<=n-1;i++) f[1<<i][i]=1; for(int i=1;i<(1<<n);++i) for(int j=0;j<n;++j) if(f[i][j]) for(int k=0;k<n;++k) if(!(i&(1<<k))&&abs(a[j]-a[k])>K) f[i|(1<<k)][k]+=f[i][j]; for(int i=0;i<n;++i) ans+=f[(1<<n)-1][i]; cout<<ans<<"\n"; return 0; }