折半搜索.

折半搜索

  • 知识点
    • 折半搜索的原理
    • 折半搜索的过程
  • 例题
    • 题目:世界冰球锦标赛
      • 题目描述
      • 输入样例
      • 输出样例
      • 提示
    • 世界冰球锦标赛题解
      • 思路
      • 代码

知识点

折半搜索的原理

折半搜索是一种技巧,实际上就是将一个次搜索过程分成两次进行,然后将两次搜索的结果合并,这种操作能大大减少用时。
如,有n个东西,问有多少种选取方案,分别选了哪几个?暴力时间复杂度 O ( 2 n ) O(2^n) O(2n)折半后时间复杂度 O ( 2 n 2 × 2 ) O(2^{\frac{n}{2}}\times2) O(22n×2)

折半搜索的过程

先将要搜索的部分分成两部分,然后进行第一部分的搜索,将结果存起来,再将需要做的操作做完,最后进行第二次搜索,将结果直接与第一次的匹配,统计答案并输出。

例题

题目:世界冰球锦标赛

时间限制:1秒 内存限制:128M

题目描述

从N个数中选出一些数,使其的和不超过M,输出有多少种选取方案。 ( 1 ≤ N ≤ 40 , 1 ≤ M ≤ 1 0 18 ) (1≤N≤40,1≤M≤10^{18}) (1N40,1M1018)

输入样例

5 1000
100 1500 500 500 1000

输出样例

8

提示

八种方案分别是:
· 一场都不看,溜了溜了
· 价格 100 的比赛
· 第一场价格 500 的比赛
· 第二场价格 500 的比赛
· 价格 100 的比赛和第一场价格 500 的比赛
· 价格 100 的比赛和第二场价格 500 的比赛
· 两场价格 500 的比赛
· 价格 1000 的比赛

世界冰球锦标赛题解

思路

把比赛平均分成两份,进行完第一次搜索后将结果排个序,因为合并时要用到二分查找,然后进行第二次搜索,搜出一个答案用二分查找出最大是哪个匹配方式,累加它的编号(因为排了序),最后输出答案。

代码

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
long long a[50],n,m;
long long cnt=0,anss[1500000],ans=0;
void dfs(long long x,long long sum,long long end,int flag){if(sum>m){return ;}if(x==end+1){cout<<sum<<endl; if(flag==0){anss[++cnt]=sum;	}else{ans+=upper_bound(anss+1,anss+1+cnt,m-sum)-anss-1;}return ;}dfs(x+1,sum+a[x],end,flag);dfs(x+1,sum,end,flag);
}
int main() {scanf("%lld %lld",&n,&m);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}dfs(1,0,n/2,0);sort(anss+1,anss+cnt+1);dfs(n/2+1,0,n,1);printf("%lld",ans);return 0;
}

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

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

相关文章

145 Linux 网络编程1 ,协议,C/S B/S ,OSI 7层模型,TCP/IP 4层模型,

一 协议的概念 从应用的角度出发&#xff0c;协议可理解为“规则”&#xff0c;是数据传输和数据的解释的规则。 典型协议 传输层 常见协议有TCP/UDP协议。 应用层 常见的协议有HTTP协议&#xff0c;FTP协议。 网络层 常见协议有IP协议、ICMP协议、IGMP协议。 网络接口层 常…

作业-逆序和定位

目录 字符串逆序 题目描述 输入 输出 样例 解题思路&#xff1a; 单词倒排 题目描述 输入 输出 样例 解题思路&#xff1a; 首字母大写 题目描述 输入 输出 样例 解题思路&#xff1a; 统计句子中单词个数 题目描述 输入 输出 样例 解题思路&#xff1a; 大小写字母互换 题目描…

springboot“涛宝”大学生二手物品交易商城

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

Kubernetes operator系列:webhook 知识学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会对 kubernetes webhook 知识进行学习 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.com/graham924/share-code-operator-st…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章&#xff0c;就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法&#xff0c;选用合适的测试工具和被测系统&#xff0c;实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

软件实例,餐厅酒水寄存管理系统软件,酒水寄存登记表软件操作教程

软件实例&#xff0c;餐厅酒水寄存管理系统软件&#xff0c;酒水寄存登记表软件操作教程 一、前言 以下软件操作以 佳易王酒水寄存管理系统软件V16.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、酒水寄存管理系统软件可以管理多个品类的物…

SendMessage 和 PostMessage 有什么区别?

SendMessage和PostMessage都是Windows编程中用于进程间通信或同一进程内不同线程间通信的函数&#xff0c;用于向窗口发送消息。尽管这两个函数的目的相似&#xff0c;但它们在实现方式和行为上存在一些关键差异。 同步与异步&#xff1a; SendMessage是一个同步消息发送函数。…

用 C 语言模拟 Rust 的 Result 类型

在 Rust 中&#xff0c;Result<T, E> 类型是一个枚举&#xff0c;它表示一个操作可能成功并返回一个值 T&#xff0c;或者失败并返回一个错误 E。在 C 语言中&#xff0c;没有直接对应的 Result 类型&#xff0c;但我们可以使用结构体和枚举来模拟它。 下面是一个用 C 语…

AI健身教练-引体向上-俯卧撑计数-仰卧起坐姿态估计-康复训练姿态识别-姿态矫正

在AI健身应用中&#xff0c;通过关键点检测技术可以实现对用户动作的精准捕捉和分析&#xff0c;从而进行统计计数和规范性姿态识别。 统计计数&#xff1a;比如在做瑜伽、健身操等运动时&#xff0c;系统可以通过对人体关键点&#xff08;如手部、脚部、关节等&#xff09;的…

复习 --- windows 上安装 git,使用相关命令

文章目录 很少使用windows的git工具&#xff0c;这次借助这个任务&#xff0c;记录下使用过程&#xff0c;其他的等有空在整理。 其中&#xff0c;还使用了浏览器的AI小助手&#xff0c;复习了git相关的命令&#xff1a;图片放最后

ROS——集成开发环境搭建

1.4 ROS集成开发环境搭建 和大多数开发环境一样&#xff0c;理论上&#xff0c;在 ROS 中&#xff0c;只需要记事本就可以编写基本的 ROS 程序&#xff0c;但是工欲善其事必先利其器&#xff0c;为了提高开发效率&#xff0c;可以先安装集成开发工具和使用方便的工具:终端、ID…

C++ 虚函数表

虚函数表 当一个类中声明了虚函数时&#xff0c;这个函数在编译时会被标记为虚函数&#xff0c;并且对应的虚函数表中会为这个类生成一个虚函数表&#xff1b; 当基类指针指向派生类对象时&#xff0c;如果这个函数被调用&#xff0c;实际上调用的是派生类中的函数。这是因为…

Vue2(四):Vue监测数据的原理(对象,数组),Vue.set的使用方法

一、更新时的一个问题 如果我要点击按钮实现更新冯万宁儿的信息&#xff0c;那么如果一个属性一个属性地改&#xff0c;可以修改成功&#xff0c;并且Vue也会检测到并更新到页面。 但是我如果直接把要修改的信息写在this.persons[0] { id: 001, name: 冯千宁儿, age: 66, se…

Android Studio中快速修改包名

Android Studio中快速修改包名 假设原包名是com.abc.efg&#xff0c; 新包名是com.aaa.bbb 1、点击齿轮图标&#xff0c;把Compact Middle Packages前面的对勾取消&#xff0c;如果没有就忽略此步 2、在左侧项目栏中&#xff0c;选择Android, App-->java-->com,下面可以看…

SpringBoot程序的核心功能及优点

本篇博客主要记录SpringBoot程序的核心功能及优点&#xff1a; 起步依赖&#xff08;简化依赖配置&#xff09; 依赖配置的书写简化就是靠这个起步依赖达成的。 自动配置&#xff08;简化常用工程相关配置&#xff09; 配置过于繁琐&#xff0c;使用自动配置就可以做相应的简化…

教程:如何制作和分享自定义GPT

自定义GPT教程&#xff1a;如何制作和分享 引言 人工智能领域不断发展&#xff0c;引入了改变我们与科技互动方式的创新工具。在这些创新中&#xff0c;自定义生成式预训练变压器&#xff08;GPT&#xff09;的出现尤为引人注目。这些AI模型超越了标准ChatGPT的功能&#xff…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

k8s HPA 自动伸缩机制 (配置,资源限制,)

目录 一、概念 核心概念 工作原理 HPA 的配置关键参数 关键组件 使用场景 注意事项 如何确保程序稳定和服务连续 二、metrics-server 部署 metrics-server 准备 metrics-server 镜像: 使用 Helm 安装 metrics-server: 配置 metrics-server: 安装 metrics-server: …

EOS 与ESD 区别

ESD: 英文&#xff1a;Electrical Static Discharge&#xff1b; 定义&#xff1a;不同静电电位的两个物体之间的电荷转移&#xff1b;中文释为静电放电。静电是一种客观的自然现象&#xff1b; EOS&#xff1a; 英文&#xff1a;Electrical Over Stress 定义&#xf…