1231: [Usaco2008 Nov]mixup2 混乱的奶牛

来源:互联网 发布:手机连不上移动数据 编辑:程序博客网 时间:2024/06/05 07:01

题目链接

题目大意:n头奶牛排队,一个队伍为混乱的当且仅当其中任意相邻两牛编号相差超过k,求混乱队伍方案数

题解:状压dp
f[i][j]ij
转移时枚举一下新的结尾的牛

我的收获:……

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int M=19;int n,K,t,a[M],p[M];long long ans,f[M][(1<<16)+5];void Dp(){    for(int i=1;i<=n;i++) f[i][p[i]]=1;    for(int x=0;x<=t;x++)        for(int i=1;i<=n;i++)        if(x&p[i]) for(int j=1;j<=n;j++)        if(!(x&p[j])&&abs(a[i]-a[j])>K)        f[j][p[j]|x]+=f[i][x];}void work(){    Dp();    for(int i=1;i<=n;i++) ans+=f[i][t];    cout<<ans<<endl;}void init(){    cin>>n>>K;t=(1<<n)-1;    for(int i=1;i<=n;i++) scanf("%d",&a[i]);    for(int i=1;i<=n;i++) p[i]=1<<(i-1);}int main(){    init();    work();    return 0;}
原创粉丝点击