hdu4876 深搜+(随机枚举剪枝)
题意:
给你n个数,让你从选择k个数,然后排成一个环(k个数的顺序随意,但是排成一个环后就不能变了),然后可以在这个环上任意的找连续w个数(w<=k),可以找多次,得到一个值等于当前找的连续的数的异或和,最后问你能找到>=L&&<=R的最大的R,L,R之间的数必须全部存在,给你N,K,L,求最大的R.
思路:
直接先暴力找到k个数(最多C(20,6)),然后在枚举这k个数的全排列(全排列有STL函数,不想用可以自己深搜枚举),对于每一个序列求出所有可能解,找到最大的R,更新答案,这里有一个很重要的剪枝,也是这个题目的核心就是在全排列之前可以先判断一下是否可能存在可以更新R的最优解,直接深搜枚举当前这k个数(不用管顺序,是找可能存在),看看组成的最大的是否比当前的最大R大,如果不是,那么就没必要全排列再去枚举了,时间复杂度
深搜判断是 O(2^5) 而直接来全排列+枚举是 O(5! * 5 * 5),题目说的是随机数据,所以不存在那种全是极端数据,也就是所有情况都满足的数据,所以相比之下,还是加上那个剪枝比较合算。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; int N ,K ,L ,R ,ks;
int num[25] ,mark[130];
int now[25]; void mk_jude(int k ,int sum)
{
if(k == K + 1) return ;
mark[sum ^ now[k]] = 1;
mk_jude(k + 1 ,sum ^ now[k]);
mk_jude(k + 1 ,sum);
} int jude(int k ,int sum)
{
memset(mark ,0 ,sizeof(mark));
mk_jude(1 ,0);
for(int i = L ;i <= R ;i ++)
if(!mark[i]) return 0;
return 1;
} void dfs(int k ,int I)
{
if(k == K + 1)
{
if(!jude(1 ,0)) return;
int tmp[25];
for(int i = 1 ;i <= K ;i ++)
tmp[i] = now[i];
for(int tt = 1 ;tt <= ks ;tt ++)
{
memset(mark ,0 ,sizeof(mark));
for(int i = 1 ;i <= K ;i ++)
{
int sum = 0;
for(int j = 1 ;j <= K ;j ++)
{
int a = i + j - 1;
if(a > K) a -= K;
sum = sum ^ tmp[a];
mark[sum] = 1;
}
}
int mk = 0;
for(int i = L ;1 ;i ++)
if(!mark[i])
{
mk = i - 1;
break;
}
if(R < mk) R = mk;
next_permutation(tmp + 1 ,tmp + K + 1);
}
return ;
}
if(I == N + 1) return;
now[k] = num[I];
dfs(k + 1 ,I + 1);
dfs(k ,I + 1);
} int main ()
{
int i;
while(~scanf("%d %d %d" ,&N ,&K ,&L))
{
for(i = 1 ;i <= N ;i ++)
scanf("%d" ,&num[i]);
for(R = 0 ,ks = 1 ,i = 2 ;i <= K ;i ++)
ks *= i;
dfs(1 ,1);
if(R < L) R = 0;
printf("%d\n" ,R);
}
return 0;
}
hdu4876 深搜+(随机枚举剪枝)的更多相关文章
- poj1190 生日蛋糕(深搜+剪枝)
题目链接:poj1190 生日蛋糕 解题思路: 深搜,枚举:每一层可能的高度和半径 确定搜索范围:底层蛋糕的最大可能半径和最大可能高度 搜索顺序:从底层往上搭蛋糕,在同一层尝试时,半径和高度都是从大到 ...
- HDU 3720 深搜 枚举
DES:从23个队员中选出4—4—2—1共4种11人来组成比赛队伍.给出每个人对每个职位的能力值.给出m组人在一起时会产生的附加效果.问你整场比赛人员的能力和最高是多少. 用深搜暴力枚举每种类型的人选 ...
- USACO 2.3.3 Zero Sum 和为零(深搜枚举)
Description 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将 ...
- HDU-5423 Rikka with Tree。树深搜
Rikka with Tree 题意:给出树的定义,给出树相似的定义和不同的定义,然后给出一棵树,求是否存在一颗树即和其相似又与其不同.存在输出NO,不存在输出YES. 思路:以1号节点为根节点,我们 ...
- 一本通例题-生日蛋糕——题解<超强深搜剪枝,从无限到有限>
题目传送 显然是道深搜题.由于蛋糕上表面在最底层的半径确认后就确认了,所以搜索时的面积着重看侧面积. 找维度/搜索面临状态/对象:当前体积v,当前外表面面积s,各层的半径r[],各层的高度h[]. 可 ...
- 一本通例题埃及分数—题解&&深搜的剪枝技巧总结
一.简述: 众所周知,深搜(深度优先搜索)的时间复杂度在不加任何优化的情况下是非常慢的,一般都是指数级别的时间复杂度,在题目严格的时间限制下难以通过.所以大多数搜索算法都需要优化.形象地看,搜索的优化 ...
- 【笔记】「pj复习」深搜——简单剪枝
深搜--简单剪枝 说在最前面: 因为马上要 NOIP2020 了,所以菜鸡开始了复习qwq. pj 组 T1 ,T2 肯定要拿到满分的,然后 T3 , T4 拿部分分, T3 拿部分分最常见的做法就是 ...
- 深搜+DP剪枝 codevs 1047 邮票面值设计
codevs 1047 邮票面值设计 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- Hdu3812-Sea Sky(深搜+剪枝)
Sea and Sky are the most favorite things of iSea, even when he was a small child. Suzi once wrote: ...
随机推荐
- pyhont+unittest的测试固件
在执行一条自动化测试用例时需要做一些测试前的准备工作和测试后的清理工作,如:创建数据库链接.启动服务进程.打开文件.打开浏览器.测试环境的清理.关闭数据链接.关闭文件等.如果每执行一条用例都需要编写上 ...
- Kafka SASL ACL配置踩坑总结
源起:工程现阶段中间件采用的是kafka.满足了大数据的高吞吐,项目间的解耦合,也增强了工程的容错率与扩展性.但是在安全这一块还有漏洞,kafka集群中,只要网站内的任何人知道kafka集群的ip与t ...
- 爬虫必知必会(3)_requests模块高级
一.爬虫爬取失败的几个原因 1.在短时间内向网站发起了一个高频的请求 解决办法:使用代理 2.连接池(http)中的资源被耗尽 解决办法:立即将请求断开:Connection:close 3.高清图片 ...
- (Java基础--Spring阶段)常见面试题题目及解析整理(2021.03.12)
题目整理 Java基础进阶阶段 基础概念类 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建 ...
- VS添加dll引用
直接添加(CADImport.dll) 手动添加 (sgcadexp.dll) 直接放到项目bin的目录下
- Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架
目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...
- C# 通过ServiceStack 操作Redis——ZSet类型的使用及示例
Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列 /// <summary> /// Sorted Sets是将 ...
- 官方正式发布 Java 16
前言 就在2021/03/16,官方正式发布了Java 16.我们可以下载使用Java 16了. 特性 向量API(孵化) 在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢 ...
- 小白的第一次sql实战
去年发的有一篇sql注入忘记粘贴过来了,今天想起了就fuzz过来一下 有id尝试sql注入 找这种sql注入的站用sql检索就行了,但是最好挂代理用谷歌搜索,百度的话搜sql注入的很多被别人打过了,导 ...
- DAOS 分布式异步对象存储|事务模型
DAOS API 支持分布式事务,允许将针对属于同一 Container 的对象的任何更新操作组合到单个 ACID 事务中.分布式一致性是通过基于多版本时间戳排序的无锁乐观并发控制机制提供的.DAOS ...