Description

混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S_i <= 25,000). 奶牛为她们的编号感到骄傲, 所以每一头奶牛都把她的编号刻在一个金牌上, 并且把金牌挂在她们宽大的脖子上. 奶牛们对在挤奶的时候被排成一支"混乱"的队伍非常反感. 如果一个队伍里任意两头相邻的奶牛的编号相差超过K (1 <= K <= 3400), 它就被称为是混乱的. 比如说,当N = 6, K = 1时, 1, 3, 5, 2, 6, 4 就是一支"混乱"的队伍, 但是 1, 3, 6, 5, 2, 4 不是(因为5和6只相差1). 那么, 有多少种能够使奶牛排成"混乱"的队伍的方案呢?

Input

* 第 1 行: 用空格隔开的两个整数N和K

* 第 2..N+1 行: 第i+1行包含了一个用来表示第i头奶牛的编号的整数: S_i

Output

第 1 行: 只有一个整数, 表示有多少种能够使奶牛排成"混乱"的队伍的方案. 答案保证是 一个在64位范围内的整数.

Sample Input

4 1
3
4
2
1

Sample Output

2

输出解释:
两种方法分别是:
3 1 4 2
2 4 1 3

 
竟然还有我可以不看题解做起的状压dp,开心。
dp[x][j]表示状态为x,排在最后的奶牛编号为j的混乱方案数。注意只有一只奶牛的情况(边界)
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=18,maxs=(1<<16)+10;
long long dp[maxs][maxn],n,kk,ans;
int bh[maxn];
bool ok[maxn][maxn]; long long aa;char cc;
long long read() {
aa=0;cc=getchar();
while(cc<'0'||cc>'9') cc=getchar();
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
return aa;
} int ff(int x) {
int rs=0;
while(x) {
rs++;x>>=1;
}
return rs;
} int main() {
n=read();kk=read();
for(int i=1;i<=n;++i) bh[i]=read();
for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j) if(abs(bh[i]-bh[j])>kk) {
ok[i][j]=ok[j][i]=1;
}
for(int x=1;x<(1<<n);++x) {
if(x-(x&(-x))==0) dp[x][ff(x)]=1;
for(int j=1;j<=n;++j) if(x&(1<<(j-1))){
for(int k=1;k<=n;++k) if(!(x&(1<<(k-1)))&&ok[j][k]) {
dp[x|(1<<(k-1))][k]+=dp[x][j];
}
}
}
for(int i=1;i<=n;++i) ans+=dp[(1<<n)-1][i];
printf("%lld",ans);
return 0;
}

  

最新文章

  1. 【总结】C# Access 数据库 增删查改 的简单步骤
  2. c#使用正则表达式抓取a标签的链接和innerhtml
  3. [Java Web]Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors
  4. 8-IO总结
  5. JsonP的简单demo
  6. 系统中定义VOMapping的时候注意大小写
  7. Windows Server 2012从Evaluation版转成正式版
  8. 注册表与盘符(转victor888文章 )
  9. Windows Phone 8初学者开发—第23部分:测试并向应用商店提交
  10. STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase
  11. nginx使用openssl的证书-泛解析
  12. jstree获取整棵树的json数据
  13. docker搭建zabbix
  14. vue组件详解(二)——使用props传递数据
  15. Java数据结构和算法 - 简单排序
  16. 「FHQ Treap」学习笔记
  17. SDN 软件定义网络----学习1
  18. MFC列表控件更改一行的字体颜色
  19. 【CF666E】Forensic Examination 广义后缀自动机+倍增+线段树合并
  20. Nodejs----登录验证

热门文章

  1. PAT甲级——A1033 To Fill or Not to Fill
  2. Jquery选择器总结一
  3. 2019-8-8-WPF-非客户区的触摸和鼠标点击响应
  4. Git的基本了解与使用、向github提交代码
  5. 纪念——代码首次达到近50K(更新:78.8K 2019行)
  6. [BZOJ3990][SDOI2015][LOJ#2181]-排序
  7. _mysql_exceptions.IntegrityError: (1062, &quot;Duplicate entry, Python操作MySQL数据库,插入重复数据
  8. Java review-basic2
  9. 给没有id主键的表添加id,并设置为not null 然后填充自增id
  10. Docker Nginx部署