题意

长度为n的数组,上面有k个位置是1,现在有l种长度的连续全1串,要求用最少的次数将这个数组异或成全0的数组。n<=1E5,k<=10,l<=100。


思考

先将数组进行异或的差分。可以发现,现在异或上全1串只是将两个端点进行异或。

接下来求出将每对1变成0的最小代价,之后就是简单状压。

复杂度O(nkl+2^(2k))。


代码

 #include<bits/stdc++.h>
using namespace std;
const int maxn=2E5+;
const int inf=;
int n,k,l;
int a[maxn],b[maxn],len[maxn],where[maxn],tot;
int dis[][];
int f[maxn],ans[(<<)+];
bool vis[maxn];
void bfs(int S,int num)
{
memset(vis,,sizeof(vis));
queue<int>Q;
Q.push(S);
vis[S]=;
for(int i=;i<=n;++i)
f[i]=inf;
f[S]=;
while(!Q.empty())
{
int u=Q.front();
Q.pop();
for(int i=;i<=l;++i)
{
int v=u+len[i],nw=f[u]+;
if(v>n)
continue;
if(nw<f[v])
{
f[v]=nw;
if(!vis[v])
Q.push(v),vis[v]=;
}
}
for(int i=;i<=l;++i)
{
int v=u-len[i],nw=f[u]+;
if(v<)
continue;
if(nw<f[v])
{
f[v]=nw;
if(!vis[v])
Q.push(v),vis[v]=;
}
}
}
for(int i=;i<=tot;++i)
dis[num][i]=f[where[i]];
}
int main()
{
scanf("%d%d%d",&n,&k,&l);
for(int i=;i<=k;++i)
{
int x;
scanf("%d",&x);
a[x]=;
}
++n;
for(int i=;i<=l;++i)
scanf("%d",&len[i]);
for(int i=;i<=n;++i)
{
b[i]=a[i]^a[i-];
if(b[i])
where[++tot]=i;
}
for(int i=;i<=tot;++i)
bfs(where[i],i);
for(int S=;S<(<<tot);++S)
ans[S]=inf;
ans[]=;
for(int S=;S<(<<tot);++S)
{
for(int i=;i<tot;++i)
{
for(int j=i+;j<tot;++j)
{
if((S&(<<i))||(S&(<<j)))
continue;
int nS=S|(<<i)|(<<j);
int nw=ans[S]+dis[i+][j+];
ans[nS]=min(ans[nS],nw);
}
}
}
if(ans[(<<tot)-]==inf)
printf("-1\n");
else
printf("%d\n",ans[(<<tot)-]);
return ;
}

19_07_07校内训练[xor]的更多相关文章

  1. [4.14校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi....        很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...

  2. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

  3. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  4. 19_04_19校内训练[Game]

    题意 给出n,等概率地生成一个1~n的数列.现在有n个人从左到右站成一排,每个人拿有当前数列位置上的数字,并且一开始都不知道数字是多少(但知道n是多少).从左到右让每个人进行如下选择: 1.选择保留自 ...

  5. 19_04_02校内训练[deadline]

    题意 给出一个二分图,左边为A集合,右边为B集合,要求把A集合中每一个点染为黑白两色中的一种,B集合中的颜色已定.染色后对于原本相邻且颜色相同的点,建立新的二分图,即得到了两个新的二分图,它们是独立的 ...

  6. 平面图转对偶图&19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

  7. fzyzojP3979 -- [校内训练20180914]魔法方阵

    原题见CF632F https://blog.csdn.net/Steaunk/article/details/80217764 这个比较神仙了 点边转化, 把max硬生生转化成了路径最大值,再考虑所 ...

  8. fzyzojP3580 -- [校内训练-互测20180315]小基的高智商测试

    题目还有一个条件是,x>y的y只会出现一次(每个数直接大于它的只有一个) n<=5000 是[HNOI2015]实验比较 的加强版 g(i,j,k)其实可以递推:g(i,j,k)=g(i- ...

  9. fzyzojP3372 -- [校内训练20171124]博弈问题

    对于每个点都要答案 还是异或 trie树合并石锤了 朴素枚举是O(n^2*17)的 怎么办呢? 我们发现合并的时候,一些部分的trie的子树还是不变的 改变的部分也就是合并的复杂度可以接受 鉴于大部分 ...

随机推荐

  1. Java虚拟机-字节码执行引擎

    概述 Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,成为各种虚拟机执行引擎的统一外观(Facade).不同的虚拟机引擎会包含两种执行模式,解释执行和编译执行. 运行时帧栈结构 栈帧(Sta ...

  2. [Python之路] 内存管理&垃圾回收

    一.python源码 1.准备源码 下载Python源码:https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz 解压得到文件夹: 我们主要关 ...

  3. 14.python函数

    原文:https://www.cnblogs.com/linhaifeng/articles/6113086.html 1.python中函数定义:函数是逻辑结构化和过程化的一种编程方法. pytho ...

  4. 记录安装Python第三方包“tesserocr”的方法和遇到的坑

    1. 环境: 系统环境:Win7 32 位系统 Python版本: 3.6.5        虚拟环境为:Miniconda3 2. 共需要安装的模块: a. tesserocr b. tessera ...

  5. nginx部署VUE跨域访问api

    H5端配置跨域 nginx跨域配置 server { listen 80; charset utf-8; server_name you_dome_name;#location /tasklist.j ...

  6. 【学习笔鸡】整体二分(P2617 Dynamic Rankings)

    [学习笔鸡]整体二分(P2617 Dynamic Rankings) 可以解决一些需要树套树才能解决的问题,但要求询问可以离线. 首先要找到一个具有可二分性的东西,比如区间\(k\)大,就很具有二分性 ...

  7. 洛谷$P$3168 任务查询系统 $[CQOI2015]$ 主席树

    正解:主席树 解题报告: 传送门! 首先考虑如果是单点修改,那就是个线段树板子嘛$QwQ$ 然后现在是区间修改,对于区间修改,显然就考虑差分下,就变成单点修改辣$QwQ$ 同时单点查询前$k$小也就变 ...

  8. Linux常用命令大全(一)

    Linux常用命令大全(一) 第一章 cal命令 $ cal 12 2017 :列出2017年12月的日历 $ cal 10 :列出公元10年的日历 $ cal 12 17 :列出公元17年12月的日 ...

  9. 1092 最好吃的月饼 (20分)C语言

    月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种. 若想评比出一种"最好吃"的月饼,那势必在吃货界引发一场腥风血雨-- 在这里我们用数字说话,给出全国各地各种月饼的 ...

  10. Linux下离线安装gdb及常用命令汇总

    以redhat6.5虚拟机作为例子,由于工作性质,大部分情况linux的软件安装,是采用离线方式的. 1.离线安装gdb 像gcc.g++或者gdb这种常用的工具软件,一般虚拟机都会安装的,如未安装, ...