http://www.lydsy.com/JudgeOnline/problem.php?id=3900

dp[i]表示让状态为i的鹿满足要求的最少交换次数

不能枚举两头鹿交换,因为一头鹿可能交换多次后转移到下一个状态

那就枚举子集 dp[i]=min { dp[j]+dp[j^i] }

初始化:将i这个状态上的麋鹿的角从小到大排序后,若相邻的i和i+1满足 h[i+1]-h[i]<=c,则dp[i]=鹿的个数-1,否则dp[i]=inf

因为若有t只鹿,在确保一定能通过交换满足要求的情况下,直接把它需要的那个换过来即可

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int a[],b[]; int dp[<<]; int tmp[]; int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i) scanf("%d%d",&a[i],&b[i]);
memset(dp,,sizeof(dp));
int S=<<n;
int tot; bool tag;
for(int i=;i<S;++i)
{
tot=;
tag=false;
for(int j=;j<=n;++j)
if(i&(<<j-))
{
if(abs(a[j]-b[j])>m) tag=true;
tmp[++tot]=a[j],tmp[++tot]=b[j];
}
if(!tag) { dp[i]=; continue; }
sort(tmp+,tmp+tot+);
for(int j=;j<=tot;j+=)
if(tmp[j+]-tmp[j]>m) { tag=false; break; }
if(tag) dp[i]=tot/-;
}
for(int s=;s<S;++s)
for(int t=(s-)&s;t;t=(t-)&s)
dp[s]=min(dp[s],dp[t]+dp[s^t]);
if(dp[S-]>=n) printf("-1");
else printf("%d",dp[S-]);
}

bzoj千题计划240:bzoj3900: 交换茸角的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  3. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  4. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  5. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  6. bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...

  7. bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹

    http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...

  8. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机

    http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...

  9. bzoj千题计划250:bzoj3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...

随机推荐

  1. HTML 列表实例

    41.无序列表本例演示无序列表.<h4>一个无序列表</h4><ul> <li>咖啡</li> <li>茶</li> ...

  2. docker之搭建LNMP

    一.部署mysql [root@node03 web]# docker run -itd --name lnmp_mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=1 ...

  3. Unity关于方法事件生命周期官方文档

    http://docs.unity3d.com/Manual/ExecutionOrder.html 一.组件运行的基本顺序 下图中创建类的顺序为A,B,C,A1,二运行的结果为A1,B,C,A. 可 ...

  4. PAT甲题题解-1096. Consecutive Factors(20)-(枚举)

    题意:一个正整数n可以分解成一系列因子的乘积,其中会存在连续的因子相乘,如630=3*5*6*7,5*6*7即为连续的因子.给定n,让你求最大的连续因子个数,并且输出其中最小的连续序列. 比如一个数可 ...

  5. Centos6.5下进行PHP版本升级

    http://blog.csdn.net/aliveqf/article/details/70444387

  6. C. Classy Numbers

    链接 [http://codeforces.com/contest/1036/problem/C] 题意 给你l,r,让你找在这个闭区间内位数不为0不超过3的个数,1<=l,r<=1e18 ...

  7. 第二个Sprint冲刺第六天

    第二个Sprint冲刺第六天

  8. We are a 团队

    虽然在团队中只是拖后腿的存在,但是几个人一起摸索着前进也确实有着不一样的感觉. 我们队伍共有五个人:董强强.张振鑫.王鼎.高庆阳还有我(排名不分先后) 我们有自己的关于软件工程的QQ群,会在群里讨论一 ...

  9. 三步轻松搞定delphi中CXGRID手动添加复表头(多行表头,报表头)

    网上有代码动态生成cxgrid多行表头的源码,地址为:http://mycreature.blog.163.com/blog/static/556317200772524226400/ 如果要手动设计 ...

  10. [转]MySQL 数据库事务隔离级别

    然后说说修改事务隔离级别的方法: 1. 全局修改,修改 mysql.ini 配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATAB ...