JZOJ 4314. 【NOIP2015模拟11.4】老司机
题目


思路
大意是构造一个数组使它做 \(01\) 背包能表示出所有给定的数
那就暴力枚举每个位置填什么
直到它能表示出所有给定的数
为了保证时间复杂度
我们考虑一个二进制数 \(s\) 表示能构造出的数
\(s\) 的第 \(i\) 位为一就表示当前枚举出的数组能表示出 \(i\) 这个数
那么假如一个数就是 \(s|(s << i)|(1<<i)\)
表示每位加上 \(i\) 的数是可以被表示的
小优化:当前填到这位可以构造出给定的所有数时,给当前位打个标记
以后做到这一位就可以直接 \(return\)
对应下面的 \(b\) 数组
\(Code\)
#include<cstdio>
using namespace std;
typedef long long LL;
const int N = 25;
int n;
LL a[N] , b[N] , c[N] , anss[N] , ans = 0x3f3f3f3f;
inline void dfs(int x , LL s)
{
	if (b[x - 1] || x - 1 >= ans) return;
	int fl = 0;
	for(register int i = 1; i <= n; i++)
	if (!(s & (1LL << a[i])))
	{
		fl = 1;
		break;
	}
	if (!fl)
	{
		ans = x - 1 , b[x - 1] = 1;
		for(register int i = 1; i < x; i++) anss[i] = c[i];
		return;
	}
	if (x > 6) return;
	for(register int i = c[x - 1]; i <= 50; i++)
	{
		c[x] = i;
		dfs(x + 1 , (s | (s << i)) | (1LL << i));
		if (b[x]) return;
	}
}
int main()
{
	freopen("driver.in" , "r" , stdin);
	freopen("driver.out" , "w" , stdout);
	scanf("%d" , &n);
	for(register int i = 1; i <= n; i++) scanf("%lld" , a + i);
	c[0] = 1;
	dfs(1 , 0);
	printf("%lld\n" , ans);
	for(register int i = 1; i <= ans; i++) printf("%lld " , anss[i]);
}
JZOJ 4314. 【NOIP2015模拟11.4】老司机的更多相关文章
- [JZOJ 4307] [NOIP2015模拟11.3晚] 喝喝喝 解题报告
		题目链接: http://172.16.0.132/senior/#main/show/4307 题目: 解题报告: 题目询问我们没出现坏对的连续区间个数 我们考虑从左到有枚举右端点$r$,判断$a[ ... 
- JZOJ 4298. 【NOIP2015模拟11.2晚】我的天
		4298. [NOIP2015模拟11.2晚]我的天 (File IO): input:ohmygod.in output:ohmygod.out Time Limits: 1000 ms Memor ... 
- 【NOIP2015模拟11.5】JZOJ8月5日提高组T2 Lucas的数列
		[NOIP2015模拟11.5]JZOJ8月5日提高组T2 Lucas的数列 题目 PS:\(n*n*T*T<=10^{18}\)而不是\(10^1*8\) 题解 题意: 给出\(n\)个元素的 ... 
- 【NOIP2015模拟11.5】JZOJ8月5日提高组T1 俄罗斯套娃
		[NOIP2015模拟11.5]JZOJ8月5日提高组T1 俄罗斯套娃 题目 题解 题意就是说 将1~\(n\)排列,问有多少种方案使得序列的逆序对个数小于\(k\) 很容易想到DP 设\(f[i][ ... 
- 【NOIP2015模拟11.2晚】JZOJ8月4日提高组T2 我的天
		[NOIP2015模拟11.2晚]JZOJ8月4日提高组T2 我的天 题目 很久很以前,有一个古老的村庄--xiba村,村子里生活着n+1个村民,但由于历届村长恐怖而且黑暗的魔法统治下,村民们各自过着 ... 
- 【NOIP2015模拟11.4】JZOJ2020年8月6日提高组T2 最优交换
		[NOIP2015模拟11.4]JZOJ2020年8月6日提高组T2 最优交换 题目 题解 题意 有一个长度为\(n\)的正整数 最多可以进行\(k\)次操作 每次操作交换相邻两个位置上的数 问可以得 ... 
- 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划
		[NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ... 
- 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行
		[NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ... 
- NOIP 模拟 $18\; \rm 老司机的狂欢$
		题解 \(by\;zj\varphi\) 一道很有趣的题,我用的动态开点线段树和倍增 首先对于第一问,不难想到要二分,二分时间,因为时间长一定不会比时间短能跑的人多 那么如何 check,先将所有老司 ... 
- 【NOIP2015模拟11.3】备用钥匙
		题目 你知道Just Odd Inventions社吗?这个公司的业务是"只不过是奇妙的发明(Just Odd Inventions)".这里简称为JOI社. JOI社有N名员工, ... 
随机推荐
- day11 枚举类enum & 单例模式 & 异常以及抛出
			day11 枚举enum 用enum关键字定义枚举类 特点 1.用enum关键字定义枚举类 2.枚举类默认继承java.lang.Enum类 3.枚举类的构造方法只能使用private修饰,省略则默认 ... 
- 微信小程序实战,基于vue2实现瀑布流
			1.什么是瀑布流呢? 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 瀑布流对于图片的展现, ... 
- 第二十五节:scrapy爬虫识别验证码(四)手绘验证码识别
			一.介绍 今天主要介绍的是微博客户端在登录时出现的四宫格手绘验证码,不多说直接看看验证码长成什么样. 二.思路 1.由于微博上的手绘验证码只有四个宫格,且每个宫格之间都有有向线段连接,所 ... 
- layui table 表头抖动
			原本table超出页面宽度(即table有横向滚动条)的情况下,缩放页面然后再设置定时器定时更新表单,会发现数据不变的时候table头部会左右抖动 而且th td比设置的minWidth 或者cell ... 
- 万字干货|Synchronized关键字详解
			作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试.职业成长相关资料等更多精彩文章在公众号「小牛呼噜噜」 前言 大家好,我是呼噜噜,在之前的文章中 ... 
- 深入解读MySQL InnoDB存储引擎Update语句执行过程
			参考b站up 戌米的论文笔记 https://www.bilibili.com/video/BV1Tv4y1o7tA/ 书籍<mysql是怎样运行的> 极客时间<mysql实战45讲 ... 
- uniapp 微信小程序 实现左侧菜单右侧列表,双向联动的效果
			<template> <view class="u-wrap"> <view class="u-search-box"> & ... 
- 能将三次握手讲到这个程度,不给你offer给谁!
			摘要:在后端相关岗位的入职面试中,三次握手的出场频率非常的高,甚至说它是必考题也不为过. 本文分享自华为云社区<能将三次握手理解到这个深度,面试官拍案叫绝~>,作者:龙哥手记. 在后端相关 ... 
- linux下redis_单机版_主从_集群_部署文档
			一 单机版部署 1.1 Redis下载地址 http://download.redis.io/releases/ 本次部署版本:3.2.8 当前最新版本:5.0.5 1.2 安装 部署路径说明规划 / ... 
- .NET 6配置EF Core数据库链接字符串
			appsetting.json { "Logging": { "LogLevel": { "Default": "Informat ... 
