bzoj 2571: Getting Rid of the Holidays
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的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑
题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...
- 三种做法:BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster
目录 题意 思路 AC_Code1 AC_Code2 AC_Code3 参考 @(bzoj 2780: [Spoj]8093 Sevenk Love Oimaster) 题意 链接:here 有\(n ...
- BZOJ 3729 - Gty的游戏(Staircase 博弈+时间轴分块)
题面传送门 介于自己以前既没有写过 Staircase-Nim 的题解,也没写过时间轴分块的题解,所以现在就来写一篇吧(fog 首先考虑最极端的情况,如果图是一条链,并且链的一个端点是 \(1\),那 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能(六)
前言 前面几节都是讲的基础内容,本节我们讲讲索引性能优化,当对大数据进行处理时首先想到的就是索引,一旦遇到这样的问题则手忙脚乱,各种查资料,为何平常不扎实基本功呢,我们由浅入深,简短的内容,深入的理解 ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
随机推荐
- L1-051 打折
去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情.例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60.本题就请你写个程序替客户计算折扣价. 输入格式: ...
- 玩转树莓派:OpenHAB的入门(二)
通过第一篇的介绍,我们现在已经安装了OpenHAB和Demo House,那么接下来我们来看一下OpenHAB是如何工作的. OpenHAB如何工作? 接下来你会在openHAB配置的共享文件夹看到s ...
- fopen & fcolse & fseek & ftell & fstat 文件操作函数测试
1.文件大小查询file_size.c 方法一:fseek + ftell: 方法二:ftell #include <stdio.h> #include <fcntl.h> # ...
- tensorflow中的参数初始化方法
1. 初始化为常量 tf中使用tf.constant_initializer(value)类生成一个初始值为常量value的tensor对象. constant_initializer类的构造函数定义 ...
- 关于Gson无法将匿名类转化为json字符串的问题
在使用gson过程中,一般会将数据存在一个对象模型中,使用gson将模型转换成json字符串用于数据交互. 代码形如: ArrayList<String> list = new Array ...
- 在U盘上安装Windows 7的详细步骤
买到苹果新款MacBook Air后大家最想干的事是什么?体验一下Mac OS X?事实告诉我们有几乎一半的人第一件想要做的事是装一个微软的Windows系统,但问题是新版的MBA已经没有光驱了,这可 ...
- 利用spring-mail模块发送带附件邮件dome
本例为maven项目,直接撸代码吧. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...
- Windows10中启用原来的Windows照片查看器方法
前言: ============================================== Windows10 版系统自带很多垃圾应用,图片查看器弄得很不好用,还是习惯Windows7的,自 ...
- hdu2072 单词数 字典树
字典树裸题 #include<stdio.h> #include<string.h> ][]; ]; int cnt; int ans; void Insert(char *w ...
- hdu1355
题意:有一片矩形花生田在路的一侧,田上的整数坐标位置有0个或多个花生,现规定从路上走到田地最边上的某个格点位置.从田边上走回路上.从一个格点移动到另一个格点.采摘格点上的花生,这四种动作都要花费一单位 ...