Description

B国的国王Johnny在他在位的短短几年里制定了不少的节日(事实上没超过30个),这些节日是为了尊敬各种各样他所想到的东西而设立的。每过一段固定的时间,一个节日将会被举行(即节日都是周期性的,每个节日的周期可能会不同),并且过节的那一天会普天同庆,将有盛会演奏、歌舞表演。有时候几个节日会在一天同时发生,并且有可能所有节日在同一天发生。如果出现这种情况,节日将被联合庆祝并且举行更大宴会。某一天所有节日都发生了。可能由于玩得太high了,在宴会后,国王Johnny表现开始有点古怪而且他需要与世隔绝几天。 
在国王Johnny不在的时候(约48小时)你被指定处理B国的政事。最为一个真正的爱国者,你知道这些节日是对人民没有好处的,并且你想在国王Johnny回来之前(Johnny将不会介意,因为他在宴会后会忘记所有事情)删去一些节日。然而悲哀的是,这里的人民不知道什么对他们有好处,什么对他们有坏处,如果你删去了超过k个节日他们将会反抗。你的任务是删除不超过k个节日使得最小的两次有节日的日子之间的间隔最大。

Input

文件的第一行有一个单独的整数T<=200,表示测试数据的组数。接下来有T组测试数据。对于每个测试数据,第一行包含两个整数n和K 
(1 < = K < n < = 30 ),表示节日的总数和最多可以删除的节日数。接下来的一行包含n个整数表示每个节日的周期,第i个整数表示编号为i的整数的周期,每个节日的周期将不会超过10^18。

Output

对于每个测试数据,输出一行一个数,表示最大的间隔.

二分答案,两个节日可以共存等价于周期的gcd>=答案,可以用最大独立集判定

这里给出的是的基于记忆化搜索的实现,时间复杂度上界为每组数据$O((\sqrt{2})^{n}nlogn)$,适当剪枝可以通过此题

#include<bits/stdc++.h>
typedef long long i64;
const int M=<<|;
int T,n,k,vp;
i64 a[],gs[][],vs[],lim;
i64 gcd(i64 a,i64 b){return b?gcd(b,a%b):a;}
int e[],f[M],ed[M],tk=;
void maxs(int&a,int b){if(a<b)a=b;}
int dp(int S,int w){
if(S<M&&ed[S]==tk)return f[S];
while(~S>>w&)--w;
int v=dp(S&~e[w],w-)+;
if(v<n-k)maxs(v,dp(S^<<w,w-));
if(S<M)ed[S]=tk,f[S]=v;
return v;
}
bool chk(){
int S=;
for(int i=;i<n;++i){
e[i]=;
for(int j=;j<n;++j)if(gs[i][j]<lim)e[i]|=<<j;
S|=~e[i]&<<i;
e[i]|=<<i;
}
ed[]=++tk,f[]=;
return dp(S,n-)>=n-k;
}
int main(){
for(scanf("%d",&T);T;--T){
scanf("%d%d",&n,&k);
for(int i=;i<n;++i)scanf("%lld",a+i);
std::random_shuffle(a,a+n);
vp=;
for(int i=;i<n;++i)for(int j=;j<=i;++j)vs[vp++]=gs[j][i]=gs[i][j]=gcd(a[i],a[j]);
std::sort(vs,vs+vp);
vp=std::unique(vs,vs+vp)-vs;
int L=,R=vp-,M;
while(L<R){
M=L+R+>>;
lim=vs[M];
if(chk())L=M;
else R=M-;
}
printf("%lld\n",vs[L]);
}
return ;
}

bzoj 2571: Getting Rid of the Holidays的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. 洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑

    题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...

  3. 三种做法:BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster

    目录 题意 思路 AC_Code1 AC_Code2 AC_Code3 参考 @(bzoj 2780: [Spoj]8093 Sevenk Love Oimaster) 题意 链接:here 有\(n ...

  4. BZOJ 3729 - Gty的游戏(Staircase 博弈+时间轴分块)

    题面传送门 介于自己以前既没有写过 Staircase-Nim 的题解,也没写过时间轴分块的题解,所以现在就来写一篇吧(fog 首先考虑最极端的情况,如果图是一条链,并且链的一个端点是 \(1\),那 ...

  5. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  6. SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能(六)

    前言 前面几节都是讲的基础内容,本节我们讲讲索引性能优化,当对大数据进行处理时首先想到的就是索引,一旦遇到这样的问题则手忙脚乱,各种查资料,为何平常不扎实基本功呢,我们由浅入深,简短的内容,深入的理解 ...

  7. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  8. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  9. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

随机推荐

  1. 【转载】Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析

    前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity] ...

  2. Mysql 分区表-分区操作

    一.查看MySQL是否支持分区 1.MySQL5.6以及之前版本 show variables like '%partition%'; 2.MySQL5.7 show plugins; 二.分区表的分 ...

  3. 玩转X-CTR100 l STM32F4 l W25Q64 SPI串行FLASH存储

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载FLA ...

  4. php 易忽略问题

  5. tensorflow模型持久化保存和加载

    模型文件的保存 tensorflow将模型保持到本地会生成4个文件: meta文件:保存了网络的图结构,包含变量.op.集合等信息 ckpt文件: 二进制文件,保存了网络中所有权重.偏置等变量数值,分 ...

  6. C++ 内存拷贝函数 memcpy

    在C/C++中经常会遇到对一段固定的连续内存进行拷贝操作,   这时候我们就需要用到   <cstring>  头文件  中的  memcpy  函数. 具体使用如下: 其中   ,   ...

  7. test20181004 苹果树

    题意 分析 对每个点维护子树所能达到的dfn最大值.最小值.次大值.次小值,然后就可以计算原树中每个点与父亲的连边对答案的贡献. 如果子树中没有边能脱离子树,断掉该边与任意一条新加的边都成立,答案就加 ...

  8. MySQL Transaction--RC事务隔离级别下加锁测试

    ==============================================================================非索引列更新 在读提交的事务隔离级别下,在非 ...

  9. ClickHouse 简单试用

    ClickHouse 具有强劲的数据分析能力,同时支持标准sql 查询,内置了好多聚合参数 同时可以方便的使用表函数连接不同的数据源(url,jdbc,文件目录...) 测试使用docker安装 参考 ...

  10. sql server 数字字符串的排序

    假如我们有这样的数据格式1#XXXXX 20#CCCCC等的一系列数据那么我们如何可以排序出1 ,2,3,4,5,6,7.......这样的数据呢 我们知道整数是可以排序成这样的格式的,但是字符串就不 ...