码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛【状压dp】

时间:2018-04-27 16:43:40      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:str   div   stream   return   printf   scanf   i++   zoj   algorithm   

设f[i][j]为奶牛选取状态为i,最后一头选的为j,转移直接f[k][(1<<(k-1)|i]+=f[j][i]

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,p[20],a[20];
long long f[20][1<<16],ans;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        p[i]=1<<(i-1);
    }
    for(int i=1;i<=n;i++)
        f[i][p[i]]=1;
    for(int i=0;i<=(1<<n)-1;i++)
        for(int j=1;j<=n;j++)
            if(p[j]&i)
                for(int k=1;k<=n;k++)
                    if(!(p[k]&i)&&abs(a[k]-a[j])>m) 
                        f[k][p[k]|i]+=f[j][i];
    for(int i=1;i<=n;i++) 
        ans+=f[i][(1<<n)-1];
    printf("%lld\n",ans);
    return 0;
}

bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛【状压dp】

标签:str   div   stream   return   printf   scanf   i++   zoj   algorithm   

原文地址:https://www.cnblogs.com/lokiii/p/8962987.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!