洛谷P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows

状压dp

代码

//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lli long long int
using namespace std;
const int M=1<<17;
const int S=20;
lli f[S][M];
int n,m,a[S];
signed main()
{
	cin>>n>>m;
	for (int i=1;i<=n;i++) cin>>a[i];
	int mks=(1<<n)-1;
	for (int i=1;i<=n;i++) f[i][1<<(i-1)]=1;
	for (int i=0;i<=mks+1;i++)
	for (int k=1;k<=n;k++)
		if (i&(1<<(k-1))) 
			for (int j=1;j<=n;j++)
				if (!(i&(1<<(j-1)))&&(a[k]-a[j]>m||a[j]-a[k]>m))
					f[j][i|(1<<(j-1))]+=f[k][i];
	lli ans=0;
	for (int i=1;i<=n;i++) ans+=f[i][mks];
	cout<<ans;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/acerandaker/article/details/81087241
今日推荐