折半搜索-oier复健练习题目

news2024/11/17 3:35:05

算法介绍:

折半搜索常用于复杂度O(n!)级的搜索问题,当我们发现很显然可以将问题划分为两部分分别搜索枚举,再合二为一求出最终答案时,我们可以选择使用折半搜索。

常见数据规模:

对于答案的值域往往没有要求,只对给出元素个数 n n n 有一定要求:

n ≤ 50 n\leq50 n50

例题:

来源:东BOJ:oj.neu.edu.cn

在这里插入图片描述

解题思路:

设目标值x为 g o a l goal goal,最终种类数为 a n s ans ans

如果纯暴力解决,算法复杂度为 O ( 2 n ) O(2^n) O(2n),而 n n n最大可达到 40 40 40,显然是会超时的

所以我选择先枚举出前半部分元素,即 t 1 ∼ t n / 2 {t_1} \sim {t_{n/2}} t1tn/2所能生成的所有值 t o t 1 tot_1 tot1所组成的集合 s s s

再去搜索 t n / 2 + 1 ∼ t n {t_{n/2+1}} \sim {t_{n}} tn/2+1tn能组合产生的所有的值 t o t 2 tot_2 tot2,对于每次搜索产生的 t o t 2 tot_2 tot2,都去 s s s中二分搜索出 x − t o t 2 x-tot_2 xtot2的值,如果 x − t o t 2 x-tot_2 xtot2存在,就是找到可行方案了,It’s MYGO!, 就把 t y p e [ x − t o t 2 ] type[x-tot_2] type[xtot2]加到最终答案 a n s ans ans中。

如果没有找到,就不是可行方案,乐队就要解散了(大悲)

关于我曲折的debug过程

最开始是 T L E TLE TLE,这很正常,毕竟 s s s规模还是挺大的,硬搜肯定会 T T T掉。
显然优化就是 u n i q u e unique unique去重,然后统计 s s s每个元素的出现次数。
结果还是过不了,一堆 W A WA WA
心态就彻底炸了
这题都做不出来是不是该速速remake了
胃疼头疼的debuff就一起上了。
最后发现,是 u n i q u e unique unique写错了…
本来我定义的 s s s大小是 c n t cnt cnt,实际我给写成 n n n了…

正确代码:
在这里插入图片描述

错误代码
在这里插入图片描述

无话可说。。。。总之最后是过了,还算不错

完整代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e6+60;
long long si[maxn];
int cnt,n;
long long a[50],goal;
long long tot1=0,tot2=0;
long long minn;
long long type[maxn];
int len=0;
void dfs1(int x)
{
	if(x==n/2+1)
	{
		si[++cnt]=tot1;
		return;
	}
	tot1+=a[x];
	if(tot1<=goal) dfs1(x+1);
	tot1-=a[x];
	dfs1(x+1); 
}
long long ans=0;
int ans_id=0;
bool jud(long long res)
{
	int l=1,r=len;
	while(l<r)
	{
		int mid=(l+r+1)>>1;
		if(si[mid]==res)
		{
			ans_id=mid;
			return true;
		}
		if(si[mid]<=res) l=mid;
		else r=mid-1;
	}
	return false;/*
	for(int i=1;i<=cnt;++i) 
	{
		if(si[i]==res) ++ans;	
	}
	return false;*/
}
void dfs2(int x)
{
	if(x==n+1)
	{
		if(tot2==goal) ans+=type[1];
		else if(jud(goal-tot2)) ans+=type[ans_id];
		return;
	}
	tot2+=a[x];
	if(tot2+minn<=goal) dfs2(x+1);
	tot2-=a[x];
	dfs2(x+1);
}		
int main()
{
	scanf("%d%lld",&n,&goal);
	for(int i=1;i<=n;++i)  scanf("%lld",&a[i]);
	dfs1(1);
	minn=si[1];
	for(int i=2;i<=cnt;++i) minn=min(minn,si[i]);
	sort(si+1,si+cnt+1);
	long long now=si[1];
	long long cnt_now=1;
	len=0;
	for(int i=2;i<=cnt;++i)
	{
		if(si[i]==now) ++cnt_now;
		else
		{
			type[++len]=cnt_now;
			now=si[i];
			cnt_now=1;	
		}
	}
	type[++len]=cnt_now;
	unique(si+1,si+cnt+1)-si-1;
	dfs2(n/2+1);
	printf("%lld\n",ans);
//	printf("len=%d\n",len);
//	for(int i=1;i<=len;++i) printf("%d ",type[i]);
	return 0;	
}
/*
4 2
1 1 1 1
*/

题都看完了,就来推一首MYGO翻唱吧

【歌ってみた】少女レイ(少女REI) covered by 燈

一首不够?再来一个吧

【歌ってみた】「二息歩行 (Reloaded)」covered by 燈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins自动化部署SpringBoot项目的实现

本文主要介绍了Jenkins自动化部署SpringBoot项目的实现&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 1、Jenkins介绍 1.1、概念 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成…

shell算术运算符学习笔记

文章目录 算术运算符&#xff1a;算术运算扩展算术运算指令expr算术运算指令let自增自减运算符 算术运算符&#xff1a; 加法 - 减法 * 乘法 / 除法 % 取余 ** 幂运算算术运算扩展 算术运算扩展的运算数只能是整数 [rootlocalhost tmp]# num1$[41] [rootlocalhost tmp]# echo …

子类的构造与析构过程

一、简介 父类&#xff0c;也称基类&#xff0c;其构造方法和析构方法不能被继承&#xff1b; 子类&#xff0c;也称派生类&#xff0c;继承父类的方法和属性&#xff0c;但要加入新的构造和析构函数。 二、构造与析构过程 构造&#xff1a;先调用父类——>再调用子类 析构&…

STM32 HAL高级定时器正交编码模式案例

STM32 HAL高级定时器正交编码模式案例 &#x1f516;基于stm32F030RBT6单片机采用高级定时器1&#xff0c;编码器模式&#xff0c;测试EC11编码器。 &#x1f3ac;EC11测试效果&#xff1a; &#x1f33f;STM32定时器编码器有3种映射模式: ✨本次采用的是上面的模式3&#x…

同城外卖跑腿小程序开发的关键步骤

随着快节奏的生活方式和数字化技术的不断发展&#xff0c;外卖和跑腿服务变得越来越受欢迎。为了满足这一需求&#xff0c;越来越多的创业者和企业开始着手开发同城外卖跑腿小程序。本文将详细介绍同城外卖跑腿小程序开发的关键步骤&#xff0c;帮助您了解如何成功创建一个具有…

【Cesium】绘制线、面、体

文章目录 墙矩形长方体不规则图形椭圆椭圆柱正圆圆柱圆锥不规则多边形柱一串糖葫芦&#xff1f;带洞的矩形一系列矩形、圆形贴地的线围墙宽线宽线的体复杂线状体一根水管 墙 entities.add({wall: {id:"wall",positions: Cesium.Cartesian3.fromDegreesArray([-95.0,5…

java智慧工地云平台源码,以物联网、移动互联网技术为基础,结合大数据、云计算等,实现工程管理绿色化、数字化、精细化、智能化的效果

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中&#xff0c;围绕人、机、料、法、环等各方面关键因素&#xff0c;彻底改变传统建筑施工现场参建各方现场管理的交互方式、工作方式和管理模式&#xff0c;智…

结构体内存分配与编译器对齐数

一、编译器对齐数 先说一个编译器的概念&#xff1a;对齐数。 1、对于基本类型的数据成员&#xff1a; 结构体的成员的对齐数min&#xff08;编译器对齐数&#xff0c;成员占内存大小&#xff09; 例如VS编译器对齐数位8&#xff0c;那么int型数据对齐数就为4&#xff0c;doubl…

如何理解OSI七层模型?

一、是什么 OSI &#xff08;Open System Interconnect&#xff09;模型全称为开放式通信系统互连参考模型&#xff0c;是国际标准化组织 ( ISO ) 提出的一个试图使各种计算机在世界范围内互连为网络的标准框架 OSI 将计算机网络体系结构划分为七层&#xff0c;每一层实现各自…

20T算力打造轻地图方案,这家智驾公司持续内卷

作者 | 张祥威 编辑 | 德新 行泊一体的话题热度不减。 近日&#xff0c;宏景智驾核心产品单SoC行泊一体解决方案已全场景跑通&#xff0c;可实现高速导航辅助驾驶。 在推进量产的同时&#xff0c;宏景智驾也在布局BEV感知、轻高精地图甚至去高精地图的智驾方案&#xff0c;同…

IPv6基础

1. IPv6概述 基本概念 IPv6&#xff08;Internet Protocol Version 6&#xff09;也被称为IPng&#xff08;IP Next Generation&#xff09;。它是Internet工程任务组IETF&#xff08;Internet Engineering Task Force&#xff09;设计的一套规范&#xff0c;是IPv4&#xff…

influxDB学习记录

一、官网 influxdb官方英文文档&#xff1a;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/influxdb中文文档&#xff1a;https://jasper-zhang1.gitbooks.io/influxdb/content/ 二、centos安装与基本配置 influxdb安装与基本配置&#xff08;centos) 三…

iPhone上的闹钟不工作的原因不单一,可能多达十种

这篇文章将带你了解如何让iPhone闹钟重新工作。 调大音量 这听起来可能很明显&#xff0c;但不要跳过这一步。使用手机侧面的按钮可以在不增加闹钟音量的情况下提高音量。这是因为iPhone可以让你用相同的按钮控制两组完全不同的声音。 例如&#xff0c;如果你打开了音乐流媒…

CMMI V2.2模型介绍

1、CMMI模型内容编排 模型内容主要由三篇组成&#xff0c;包括概述、实践域&#xff08;PA&#xff09;和附录&#xff0c;共分为6个章节。 章节 标题说明篇章&#xff1a;概述第1章关于CMMI V2.0概述CMMI V2.0产品套件&#xff0c;包括模型的执行摘要。第2章 成…

mysql—面试50题—1

注&#xff1a;面试50题将分为5个部分&#xff0c;每部分10题 一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student …

S-Clustr(影子集群)新增Nets3e插件,实现一对多主机拍照

公告 项目地址:https://github.com/MartinxMax/S-Clustr 项目地址:https://github.com/MartinxMax/Nets3e 环境 这里有一台Windows主机,我们拿到了Webshell 依赖安装 根据你的主机类型选择依赖安装程序。 配置Nets3e 安装完成后,我们需要启动Nets3e服务端&#xff08;这边…

学习git博客

git新建分支并且提交代码过程 1. git pull <codeBaseAddress> [分支名(默认是master)] 2. cd <projectName> 3. git branch <newBranchName> // 创建分支 4. git checkout <newBranchName> // 切换到新分支 // 开始写你的新代码 5. git add . //…

在Windows下Edge浏览器OA发起流程问题

在Edge浏览器中发起流程 如上图所示&#xff0c;不能正常打开Excel&#xff0c;自动将Excel表格转为了PDF 怎么处理&#xff1f;还得使用IE浏览器来访问&#xff0c;但打开IE后又自动跳转到Edge&#xff0c;根本就不给使用&#xff0c;在Edge下使用IE模式也解决不了这个问题。…

Aocoda-RC F405V2 FC(STM32F405RGT6 v.s. AT32F435RGT7) IO Definitions

[TOC](Aocoda-RC F405V2 FC(STM32F405RGT6 v.s. AT32F435RGT7) IO Definitions) 1. 源由 Aocoda-RC F405V2飞控支持betaflight/inav/Ardupilot固件&#xff0c;是一款固件兼容性非常不错的开源硬件。 之前我们对比过STM32F405RGT6 v.s. AT32F435RGT7 Comparison for Flight …

架构案例分析重点

架构案例分析重点 信息系统架构架构图 层次式架构&#xff08;可能考点&#xff09;表现层框架设计中间层架构设计数据访问层数据访问层工厂模式的设计&#xff08;一个考点&#xff09; 物联网三层 云原生架构面向服务架构(SOA)SOA设计模式 嵌入式系统架构鸿蒙操作系统&#x…