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. markdown 笔记二

    Markdown 语法笔记==============================1,头部欢迎# 欢迎使用flaskBlog ------ flask对于我来说,适合快速开发一些小网页,自己也想整 ...

  2. 百炼1001: Exponentiation 解题

    链接:http://bailian.openjudge.cn/practice/1001/ 思路 乍一看是很简单的题目,但是答案必须高精度输出,因此需要手动实现一个高精度运算方法.如果直接使用int, ...

  3. k8s网络之calico学习

    一.知识准备 1.calico主要通过ipip协议与bgp协议来实现通信.前者通过ipip隧道作为通信基础,后者则是纯三层的路由交换 2.bgp协议主要由两种方式:BGP Speaker 全互联模式( ...

  4. django反向解析URL和URL命名空间

    django反向解析URL和URL命名空间 首先明确几个概念: 1.在html页面上的内容特别是向用户展示的url地址,比如常见的超链接,图片链接等,最好能动态生成,而不要固定. 2.一个django ...

  5. 互评Final版本——可以低头,但没必要——取件帮

    基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题; (1)N(Need,需求) 当今大部分在校学生由于各种原因懒于亲自去取快递,而总麻烦身边人也不是长久之计.而有些同学需 ...

  6. #个人博客作业Week1----关于软件和软件工程的出现

    1.软件工程这个词如何出现的? 数学与电脑科学先锋Margaret Hamilton在开发阿波罗11号软件的期间发明的,目的是将软件与硬件还有其他工程学类做出区别,为软件以及那些发明者争取应有的正统性 ...

  7. 第三次spring冲刺2

    完成了对错题的收集,和做错题的功能,运用了android自带的SQLite数据库.

  8. PAT 1064 朋友数

    https://pintia.cn/problem-sets/994805260223102976/problems/994805267416334336 如果两个整数各位数字的和是一样的,则被称为是 ...

  9. Linux命令学习chroot和chmode

    chroot:chang root http://man.linuxde.net/chroot https://baike.baidu.com/item/chroot 1.限制被CHROOT的使用者所 ...

  10. css实现table中td单元格鼠标悬浮时显示更多内容

    table中,td单元格无法显示下全部内容,需要在鼠标hover时显示全部内容. 正常显示样式: 鼠标hover时: html: <td>displayAddress<span cl ...