【状压DP】bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛
2015-05-12 15:49
211 查看
f(i,j)表示当前牛的集合为i,最后一个牛为j时的方案数。
f(i∪{k},k)+=f(i,j) //k∉i&&j∈i
init:f({i},i)=1 //0<=i<n
f(i∪{k},k)+=f(i,j) //k∉i&&j∈i
init:f({i},i)=1 //0<=i<n
#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; #define N 17 int n,m,a ; ll ans,f[(1<<N)+1] ; int main() { scanf("%d%d",&n,&m); for(int i=0;i<n;++i) scanf("%d",&a[i]); for(int i=0;i<n;++i) f[1<<i][i]=1; for(int i=0;i<(1<<n);++i)//枚举当前牛的集合 for(int j=0;j<n;++j) if(i&(1<<j))//枚举集合中的最后一个元素 for(int k=0;k<n;++k) if(!(i&(1<<k))&&abs(a[k]-a[j])>m)//枚举不在集合中的一个元素 f[i|(1<<k)][k]+=f[i][j]; for(int i=0;i<n;++i) ans+=f[(1<<n)-1][i]; printf("%lld\n",ans); return 0; }
相关文章推荐
- bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛【状压dp】
- 【状压dp】Bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛
- 【bzoj1231】【Usaco2008 Nov】mixup2 混乱的奶牛【状压dp】
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
- bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛(状压dp)
- [BZOJ1231][Usaco2008 Nov]mixup2 混乱的奶牛(状压dp)
- [BZOJ1231] [Usaco2008 Nov]mixup2 混乱的奶牛
- bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛 -- 状压DP
- [bzoj1231][Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
- bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛(状压DP)
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
- bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛
- [BZOJ 1231][Usaco2008 Nov]mixup2 混乱的奶牛:状压DP
- bzoj1231: [Usaco2008 Nov]mixup2 混乱的奶牛
- bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛(状压dp)
- bzoj 1231 [Usaco2008 Nov]mixup2 混乱的奶牛
- Bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛 状压DP
- 【bzoj1231】[Usaco2008 Nov]mixup2 混乱的奶牛 状态压缩dp