贪心 二分查找和二分答案 递推与递归

news2024/12/24 2:22:55

贪心

知识点

局部最优解->整体最优解

贪心算法理论基础!_哔哩哔哩_bilibili

选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

证明贪心策略的有效性

· 反证法

· 数学归纳法

image.png

例题 

376.摆动序列

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

class Solution {
public:
 int wiggleMaxLength(vector<int>& nums) {
 if (nums.size() <= 1) return nums.size();
 int curDiff = 0; // 当前⼀对差值
 int preDiff = 0; // 前⼀对差值
 int result = 1; // 记录峰值个数,序列默认序列最右边有⼀个峰值
 for (int i = 0; i < nums.size() - 1; i++) {
 curDiff = nums[i + 1] - nums[i];
 // 出现峰值
 if ((curDiff > 0 && preDiff <= 0) || (preDiff >= 0 &&
curDiff < 0)) {
 result++;
 preDiff = curDiff;
 }
 }
 return result;
 }};

P1090 [NOIP2004 提高组] 合并果子

[NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G - 洛谷

补充知识:优先队列

定义:

priority_queue<int>q;

从小到大:

priority_queue<int,vector<int>,greater<int> >q;

如果你想从大到小的话可以重载运算符:

struct Node{
	int x,y;
	Node(int a=0, int b=0):
		x(a), y(b) {}
};
 
struct cmp{
	bool operator()(Node a, Node b){
		if(a.x == b.x)	return a.y>b.y;
		return a.x>b.x;
	}
};

priority_queue<Node,vector<Node>,cmp>q;

或者你也可以用less

priority_queue<int,vector<int>,less<int> >q;

题解:

#include<bits/stdc++.h>
using namespace std;
int n,x,ans;
priority_queue<int,vector<int>,greater<int> >q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>x,q.push(x);
	while(q.size()>=2){//
		int a=q.top(); q.pop();
		int b=q.top(); q.pop();
		ans+=a+b;
		q.push(a+b);
	}
	cout<<ans<<endl;
	return 0;
}


二分查找和二分答案

【算法1-6】二分查找与二分答案 - 题单 - 洛谷

二分查找

int Search(int num,int low,int high)
{
    int mid;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(num>=b[mid])  low=mid+1;
        else   high=mid-1;
    } 
    return low;   
}

二分答案

使用二分答案技巧的条件:

1)命题可以被归纳为找到使得某命题P(x)成立(或不成立)的最大(或最小)的x

2)把P(x)看作一个值真或假的函数,那么它一定在某个分界线的一侧全为真,另一侧全为假

3)可以找到一个复杂度优秀的算法来检测P(x)的真假

通俗来讲,二分答案可以用来处理“最大的最小”或“最小的最大”问题

模板:

最大值最小化

while(l<r)
{
    int mid=(l+r)>>1;
    if(check(mid))
    {
        r=mid;
    }
    else
    {
        l=mid+1;
    }
}


最小值最大化

while(l<r)
{
    int mid=(l+r+1)>>1;//注意这里是l+r+1
    if(check(mid))
    {
        l=mid;
    }
    else
    {
        r=mid-1;
    }
}


小数二分模版

while(r-l>eps)//eps为精度
{
    int mid=(l+r)>>1;
    if(check(mid))
    {
        r=mid;
    }
    else
    {
        l=mid;
    }
}



判断可行性
 

//这里已经得到l
if(ok(l))
{
    yes;
}
else
{
    no;
}

例题

P1102 A-B 数对

A-B 数对 - 洛谷

这题绝了 好多种优秀的做法(映射 二分 hash 桶 )

Aggressive cows(c语言)_克里斯蒂亚诺.CR7的博客-CSDN博客

先二分距离 然后放牛判断可不可以

Multiplication Table_Apollo-yyy的博客-CSDN博客

lower_bound()   upper_bound()

c++的lower_bound函数、upper_bound和find函数_无敌少年小旋风的博客-CSDN博客

 

三分法

 

左右三分之一点

取最大值为例->设小区间

 

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

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

相关文章

不同版本Idea部署Maven和Tomcat教学

目录 一、2019版Idea 1.1. Maven配置 1.2. Tomcat配置 二、2023版Idea 2.1 Maven配置 2.2. Tomcat配置 一、2019版Idea 1.1. Maven配置 在这篇 http://t.csdn.cn/oetKq 我已经详细讲述了Maven的下载安装及配置&#xff0c;本篇就直接开始实操 : 1. 首先进入设置搜索Mave…

6939. 数组中的最大数对和

题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 。请你从 nums 中找出和 最大 的一对数&#xff0c;且这两个数数位上最大的数字相等。 返回最大和&#xff0c;如果不存在满足题意的数字对&#xff0c;返回 -1 。 示例&#xff1a; 解题思路&#xff1a; 使用数组…

PyQt5同一界面实现不同窗口跳转

目录 一、目的 二、QStacked Widget 二、QTabWidget 三、实战演示 1、在Qt Designer中编辑界面文件 2、编写逻辑文件用于显示 四、QStackedWidget、QTabWidget可以相互嵌套使用,效果奇佳 五、附录——生成新的窗口进行跳转,跳转的同时关闭另外一个界面 1、第一个跳转…

Java之多态

多态 多态的实现条件重写重写的定义重写的例子方法重写的条件 多态思想动态绑定与静态绑定 作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a;zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&…

7-7 整数152的各位数字

本题要求编写程序&#xff0c;输出整数152的个位数字、十位数字和百位数字的值。 输入格式&#xff1a; 本题无输入。 输出格式&#xff1a; 按照以下格式输出&#xff1a; 152 个位数字 十位数字*10 百位数字*100代码长度限制 16 KB 时间限制 400 ms 内存限制 64…

Mac 卸载appium

安装了最新版的appium 2.0.1,使用中各种问题&#xff0c;卡顿....,最终决定回退的。记录下卸载的过程 1.打开终端应用程序 2.卸载全局安装的 Appium 运行以下命令以卸载全局安装的 Appium&#xff1a; npm uninstall -g appium 出现报错&#xff1a;Error: EACCES: permiss…

命题与命题联结词

一、命题 什么是命题&#xff1f; 具有确切真值的陈述句称为命题。疑问句、感叹句、祈使句都不是命题。 例如&#xff1a; 是命题 1加1等于3雪是黑色的 不是命题有&#xff1a; 太好啦&#xff01;X0X>1 原子命题&#xff08;简单命题&#xff09;——不能分解的…

1572. 矩阵对角线元素的和

题目描述&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例&#xff1a; 解题思路&#xff1a; 同时求对角线和副对角线上元素的和再减去重合的元素 相关代码&#xf…

期权定价模型系列【5】—ETF期权数据

1.前言 对期权定价模型进行研究时&#xff0c;往往需要匹配的实际数据&#xff0c;国内上市时间超过两年、主流的ETF期权包括华夏上证50ETF期权、沪深300ETF期权等&#xff0c;其对应的标的资产分别为华夏上证50ETF、华泰柏瑞沪深300ETF、嘉实沪深300ETF。 2.上证50ETF期权合约…

刨根问底,不再纠结Linux 文件权限问题

Linux 与Windows的区别 与Windows 系统不一样&#xff0c;在Linux系统中&#xff0c;无论是系统内核还是应用程序&#xff0c;都是文件。正如此&#xff0c;当你学习Linux中遇到问题时&#xff0c;总能看到热心网友的解决方法&#xff1a; rm -rf * 一旦运行此命令&#x…

Docker的基本概念及镜像加速器的配置

1.Docker的概念 由于代码运行环境不同&#xff0c;代码运行会出现水土不服的情况。运用docker容器会把环境进行打包&#xff0c;避免水土不服。docker是一种容器技术&#xff0c;它解决软件跨环境迁移的问题。 2&#xff0c;安装Docker 3.Docker架构 4.Docker镜像加速器的配…

模拟实现消息队列(以 RabbitMQ 为蓝本)

目录 1. 需求分析1.1 介绍一些核心概念核心概念1核心概念2 1.2 消息队列服务器&#xff08;Broker Server&#xff09;要提供的核心 API1.3 交换机类型1.3.1 类型介绍1.3.2 转发规则&#xff1a; 1.4 持久化1.5 关于网络通信1.5.1 客户端与服务器提供的对应方法1.5.2 客户端额外…

国产数据库-内核特性-低基数全局字典

国产数据库-内核特性-StarRocks低基数全局字典 StarRocks2.0引入了低基数全局字典&#xff0c;可以通过全局字典将字符串的相关操作转换成整型相关操作&#xff0c;大大提升查询性能。 1、低基数字典 对于利用整型替代字符串进行处理&#xff0c;通常使用字典编码进行优化。Sta…

基于WebSocket的在线文字聊天室

与Ajax不同&#xff0c;WebSocket可以使服务端主动向客户发送响应&#xff0c;本案例就是基于WebSocket的一个在线聊天室&#xff0c;不过功能比较简单&#xff0c;只能满足文字交流。演示如下。 案例学习于b站up主&#xff0c;链接 。这位up主讲的非常清楚&#xff0c;值得去学…

【并发编程JUC】Future和CompletableFuture机制

场景题 面试的时候当面试官提出一个场景题&#xff0c;比如有一个翻译接口&#xff0c;同时调用百度、网易、谷歌的三个翻译接口&#xff0c;使用返回的第一个的翻译。这个时候一般的想法可能是&#xff0c;先串行执行。然后异步获取。但是其实都知道这样性能非常慢。 Future…

Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的固定帧率(C#)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的固定帧率&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在BGAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过BGAPI SDK设置相机固定帧…

【Linux系统编程】22.exec函数、execlp、execl、execvp

目录 exec函数 execlp 参数file 返回值 测试代码1 测试结果 execl 测试代码2 测试结果 execvp 测试代码3 测试结果 exec函数 fork创建子进程后执行的是和父进程相同的程序&#xff0c;但有可能执行不同的代码分支&#xff0c;子进程往往要调用一种exec函数以执行另…

如何在Vue2.X/Vue3.X项目引入jQuery,以及增加jQuery.easing扩展?让你的动画效果更加丝滑!

前言 还记得在2015左右&#xff0c;网页开发依然是jQuery的天下&#xff0c;虽然Vue、React开始盛行&#xff0c;以及后面Angular也开始抢占市场&#xff0c;但是jQuery在市场上依然占有较大的比重。当时的html页面大多是用jQuery来写的&#xff0c;为jQuery设计的插件也是相当…

应用层协议——TCP(上)

文章目录 1. TCP协议1.1 TCP协议段格式1.2 确认应答(ACK)机制1.3 16位窗口大小1.4 6位标志位1.4.1 TCP三次握手 1.5 确认应答(ACK)机制1.6 超时重传机制1.7 连接管理机制1.7.1 理解TIME_WAIT状态1.7.2 理解 CLOSE_WAIT 状态 1. TCP协议 TCP全称为传输控制协议&#xff0c;意思…

双端口存储器原理实验

1.实验目的及要求 1.1实验目的 1&#xff09;了解双端口静态随机存储器IDT7132的工作特性及使用方法。 2&#xff09;了解半导体存储器怎样存储和读出数据。 3&#xff09;了解双端口存储器怎样并行读写&#xff0c;并分析冲突产生的情况。 1.2实验要求 1&#xff09;做好…