[USACO08NOV]奶牛混合起來Mixed Up Cows]

[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;
}
相關文章
相關標籤/搜索