zoukankan      html  css  js  c++  java
  • bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛*

    bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛

    题意:

    n头奶牛,每头有一个编号,求有多少种排列顺序使得相邻两头奶牛的编号差不超过k。n≤16。

    题解:

    状压dp。f[i][S]表示已选状态为S,上一个选的是i,满足要求的方案数,则f[i][S]=sum(f[j][S|j]),abs(num[i]-num[j])≤k。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define inc(i,j,k) for(int i=j;i<=k;i++)
     5 #define ll long long
     6 #define INF 0x3fffffff
     7 using namespace std;
     8 
     9 ll dp[20][80000]; int n,k,s[20];
    10 ll dfs(int x,int y){
    11     if(!y)return 1; if(dp[x][y]!=-1)return dp[x][y]; dp[x][y]=0;
    12     inc(i,1,n)if((y&(1<<(i-1)))&&abs(s[i]-s[x])>k)dp[x][y]+=dfs(i,y^(1<<(i-1)));
    13     return dp[x][y];
    14 }
    15 int main(){
    16     scanf("%d%d",&n,&k); inc(i,1,n)scanf("%d",&s[i]); memset(dp,-1,sizeof(dp));
    17     s[0]=-INF; printf("%lld
    ",dfs(0,(1<<n)-1)); return 0;
    18 }

    20160908

  • 相关阅读:
    跟我一起写 Makefile
    NFS服务器配置
    q
    tar命令的详细解释
    etc/xinetd.d目录介绍
    ubuntu 10.04下的配置tftp服务器
    莫队板子
    Day8(分块)
    字符串板子
    字符串练习题
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5875984.html
Copyright © 2011-2022 走看看