嘟嘟嘟

一看n那么小,那一定是状压dp了(表示从没写过,慌)。

首先dp[i][j](i 是一个二进制数,第x位为1代表选了第x头牛),表示 i 这个状态最后一头牛是第 j 头牛时的方案数。

然后当 j 被选上时,即 if(i & (1 << (j - 1)))时,我们在枚举倒数第二头牛p,也是当他存在时,且满足 abs(s[p] - s[j]) > k时,dp[i][j] += dp[i ^ (1 << (j - 1))][p],因为最后一头牛为p时,j 还没有被选,所以 j 这一位要亦或掉。

初始化就是只选一头牛的选法时一种,dp[1 << (i - 1)][i] = 1.

令 ms = (1 << n) - 1,则答案ans = sum(dp[ms][i]) (i = 1~n).

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<vector>
#include<cctype>
using namespace std;
#define space putchar(' ')
#define enter puts("")
#define Mem(a) memset(a, 0, sizeof(a))
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
const int maxn = ;
const int Maxs = 7e4;
inline ll read()
{
ll ans = ;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch)) {ans = (ans << ) + (ans << ) + ch - ''; ch = getchar();}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar(x % + '');
} int n, k, a[maxn];
ll dp[Maxs][maxn]; int main()
{
n = read(); k = read();
for(int i = ; i <= n; ++i) a[i] = read(), dp[ << (i - )][i] = ;
int ms = ( << n) - ;
for(int i = ; i <= ms; ++i)
for(int j = ; j <= n; ++j)
if(i & ( << (j - )))
for(int p = ; p <= n; ++p)
if(p != j && (i & ( << (p - ))) && abs(a[p] - a[j]) > k)
dp[i][j] += dp[i ^ ( << (j - ))][p];
ll ans = ;
for(int i = ; i <= n; ++i) ans += dp[ms][i];
write(ans); enter;
return ;
}

最新文章

  1. request 获取服务根目录地址
  2. mybatis - resultMap
  3. 【转载】基于ANSYS APDL的有裂纹平板问题的断裂力学仿真(PLANE183)
  4. lintcode:数字组合III
  5. 类似百度音乐唱片播放时CD图片不停旋转的实现
  6. linux下挂载第二块硬盘
  7. Config File Settings Of EF——实体框架的配置文件设置
  8. 使用Hadoop的MapReduce与HDFS处理数据
  9. 最短路&lt;dijk&gt;
  10. Python3 知识库
  11. Mina自定义协议简单实现
  12. android studio 开发免安装的app之目录结构
  13. CentOS.7下安装配置FTP和SFTP服务
  14. 问题:页面输出正常,php写入sqlserver乱码/空白。
  15. spark中RDD的转化操作和行动操作
  16. dubbo负载均衡策略和集群容错策略都有哪些
  17. python基础-闭包
  18. 基于 zepto 的触摸函数封装
  19. ElasticSearch安装部署(Windows)
  20. Unity编辑器下,界面替换NGUI字体以及字号

热门文章

  1. 我在项目中运用 IOC(依赖注入)--实战篇
  2. 数组元素的移动(删除) C#实现
  3. Django中间件解析
  4. android studio 加载libs
  5. Spring Boot&mdash;09通过Form提交的映射
  6. 润乾V5手机报表说明文档
  7. Fiddler基础教程
  8. PHP获取当前页面的URL地址
  9. 使用cnpm install提示package not found
  10. 执行SQL的DbHelperSQL