当前位置: 首页 > news >正文

DAY19

题目一

 空间尝试模型 一个样本做行一个样本做列

范围尝试模型 以....做分隔

dp[i][j] 为以i为左界限 以j为右界限 求这个范围内的计算值(不对 是方法数)

这& | ^ 都是双目运算符 观察一下规律 整体字符数量一定为奇数(包括运算符和数字) 对应到数组中 数组的位一定是偶数 所以每个奇数行奇数列都不要 L不能超过R 下半区也不要(经典空间尝试模型)

那条件转移是什么呢 假设左界限 有界限 中间值为 x  那么i....x-1  x+1.....j  注意审题 是可以加括号也就是说可以决定运算顺序 也就是说 一个字符串的结果 不是固定的

条件转移是什么呢 假设左界限 有界限 中间有个位置为 x  那么i....x-1  x+1.....j 

这个x位置肯定是个符号 自己举个例子就知道喵

当这个符号为&的时候 那简单  左边和右边都为1 结果才为1 左边右边有一个是0 都是0 总之就是左右相乘

但是|就比较麻烦 左1右0 为1 左0右1 为1   左1右1 为1 左0右0 为0

^呢 异或是 左1右1 为0 左0右1 左1右0 为1   左0右0 为0.

然后在这个基础呢 假如说 拿& 我左侧有3种方法为1 右侧有三种方法为1 那么我总的true的方法为 3*3对吧 记住这个dp[i][j]是方法数

所以要有两个dp数组 tdp 和 fdp 分别表示L到R范围内的(true/false)的方法数

basecase 是L==R的时候 如果是1 的话 那就是 tdp 当前位置有一种方法 0就是fdp位置有一种方法

否则为0

public static int ExpressionNumber0(String express, boolean desired){char [] chars = express.toCharArray();int N = chars.length;int [][] tdp = new int [N][N];int [][] fdp = new int [N][N];for(int i = 0;i<N;i+=2) {tdp[i][i] = chars[i] == '1'?1:0;//不用单引号就是ASCII码了fdp[i][i] = chars[i] == '0'?1:0;}for (int row = N - 3; row >= 0; row -= 2) {for (int col = row + 2; col < N; col += 2) {//行等于列的已经填完了 这次往上移动一下 就是两个格子 //col<的是N哦 所以是一行之内 先填前面 再填后面 所以可以依赖左方和下方for (int i = row + 1; i < col; i += 2) {//用这个i枚举每一个分界点  顺便说下既然依赖于左下的格子switch (chars[i]) {//注意这里行+1 是符号的位置 我得用它来确定转移方程 +1-1是格子的位置 格子的位置不能是符号位case ('&')://记住是+= 这是累加的tdp[row][col] += tdp[row][i-1]*tdp[i+1][col];fdp[row][col] += fdp[row][i-1]*fdp[i+1][col]+fdp[row][i-1]*tdp[i+1][col]+tdp[row][i-1]*fdp[i+1][col];break;case('|'):tdp[row][col] += tdp[row][i-1]*fdp[i+1][col] + fdp[row][i-1]*tdp[i+1][col]+tdp[row][i-1]*tdp[i+1][col];fdp[row][col] += fdp[row][i-1]*fdp[i+1][col];break;case('^'):tdp[row][col] += tdp[row][i - 1] * fdp[i + 1][col]+fdp[row][i - 1] * tdp[i + 1][col];fdp[row][col] += tdp[row][i - 1] * tdp[i + 1][col]+fdp[row][i - 1] * fdp[i + 1][col];break;}			}}}return desired?tdp[0][N-1]:fdp[0][N-1];}

题目二

给一个数组 划分多个数组 在哪一种划分下 能让异或和为0的更多

经典的从左往右尝试模型+范围尝试模型

dp[i] 表示从0...i最多有多少0

我们假设这种分法是 最多0的

(1) 当i位置(所属的块)异或和不为0的时候 dp[i] = dp[i-1]   

(2) 当i位置(所属的块)异或和为0  

假设答案法 假如说当前分法是最佳答案

假如其中有任意一块区域j...i那这之间肯定不存在一个k 让k...i异或和为0 因为你这相当于又切了 一块 我们开始已经假定这个是最优答案了 这就冲突了 

那假设我们的最后一块区域为j....i 这个j 一定是 离i最近的 能让这块区域异或和为0的  0^0==0 所以

0....j  j+1....i异或和都为0  我们找到j位置的答案 它再+1(我们现在说的这一块) 结果就是i位置的答案

public static int MostEOR(int [] arr) {if (arr == null || arr.length == 0) {return 0;}int [] dp = new int [arr.length];dp[0] = arr[0]==0?1:0;		HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();int eor = 0;map.put(0, -1);map.put(arr[0],0);for(int i = 1;i<arr.length;i++) {eor^=arr[i];if(map.containsKey(eor)) {int pre = map.get(eor);dp[i] = pre == -1 ? 1 : (dp[pre] + 1);//如果等于-1 就是异或和为0 直接算一种 当然如果后面又有0出现 那就回替换掉最开始的//它只对应一种情况 从0...i累加和就是 0 且中间还没出现过其他的0  所以它只有一个0}dp[i] = Math.max(dp[i - 1], dp[i]);map.put(eor, i);}return dp[dp.length - 1];}

和子序列一样 都是可能性的组织 几个可能性里面取一个most 既然要求最长/多 那就用most 是不是有点牵强了

我老觉得是 既然最后只有一种情况作为答案了 那为什么还要多个比较

答:有多种if 每种情况都可以选择 他们都是存在的 只是看我们的选择哪个作为这个位置的答案而已 所以选择多的那个

题目三

给出一组正整数arr,你从第0个数向最后一个数,
每个数的值表示你从这个位置可以向右跳跃的最大长度
计算如何以最少的跳跃次数跳到最后一个数。
 

首先我们要理解 不是每个点都跳到最远好 因为你可能会错过一个大长度

而且这个模型不用考虑往回跳 因为你完全可以中间停下来 为啥要往回跳 

五步最远能跳多远

四步最远的地方 一定比五步最远跳的近(废话)

四步每个能到的位置 加上自身的值 其中一定有一个是五步的右边界(走到最远的地方)

第一步我可以走到 i的位置 也就是说第一步的区间是0...i 这个区间里我可以选择任何一个地方作为落脚点 走第二步 但是目前我们看不出 我们可以选择在哪落脚是迈出第二步是最优解 不过没关系 我们直接枚举每一个落脚点 看看最远能走到哪 也就是找出第三步的区间...以此类推 看看最先什么时候扩到对应区间

感觉有哪不通?我也是

对于第四步来说 假如我选了其中一个落脚点 那么我这个落脚点走不到5步的区间的最右怎么办?那就不要选啊 就选能到达最边界的步 那我到达了最边界 最边界上面的步数 是一个很小的点那下一步怎么扩充 无所谓啊 我们会枚举每一个落脚点 来扩充下一步 对于每一个区间 它的每一点都是可达的 然后用它扩充出来的区间 也一样是可达的 所以不同区间所有点都是可达的 如果这个点肯定是上一个区间的某个点跳过来的 那这个调过来的点 也是上上个区间调过来的

public static int jump(int[] arr) {if (arr == null || arr.length == 0) {return 0;}int step = 0; // 跳了多少步int cur = 0; // step步内,右边界int next = 0;// step+1步内,右边界for (int i = 0; i < arr.length; i++) {if (cur < i) {step++;cur = next;}next = Math.max(next, i + arr[i]);}return step;}

被笔记骗了 压根没有什么flag -1

相关文章:

DAY19

题目一 空间尝试模型 一个样本做行一个样本做列 范围尝试模型 以....做分隔 dp[i][j] 为以i为左界限 以j为右界限 求这个范围内的计算值(不对 是方法数) 这& | ^ 都是双目运算符 观察一下规律 整体字符数量一定为奇数(包括运算符和数字) 对应到数组中 数组的位一定是偶数…...

Data analysis|Tableau基本介绍及可实现功能

一、基础知识介绍 &#xff08;一&#xff09;什么是tableau tableau 成立于 2003 年&#xff0c;是斯坦福大学一个计算机科学项目的成果&#xff0c;该项目旨在改善分析流程并让人们能够通过可视化更轻松地使用数据。Tableau可以帮助用户更好地理解和发现数据中的价值&#x…...

单元测试优化:为什么要对程序进行测试?测试有什么好处?

单元测试&#xff08;Unit Testing&#xff09;又称为模块测试, 是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。简单来说&#xff0c;就是测试数据的稳定性是否达到程序的预期。 我们日常开发时可能…...

自动装配在Spring Boot中的重要性及实现方式

这里写目录标题 自动装配在Spring Boot中的重要性及实现方式什么是自动装配&#xff1f;如何实现自动装配&#xff1f;如何使用自动装配自动装配的优势总结 手写自动装配的Java代码示例原理 自动装配在Spring Boot中的重要性及实现方式 Spring Boot是基于Spring框架的开源框架…...

校对软件在司法系统中的应用:加强刑事文书审查

校对软件在司法系统中的应用可以加强刑事文书审查&#xff0c;提高文书的准确性和可靠性。 以下是校对软件在刑事文书审查方面的应用&#xff1a; 1.语法和拼写检查&#xff1a;校对软件可以自动检查刑事文书中的语法错误和拼写错误。这包括句子结构、主谓一致、动词形式等方面…...

微信小程序上传图片和文件

1.从微信里选择图片或文件上传 使用的vant的上传组件 原生用 wx.chooseMessageFile() html <!-- 从微信上面选择文件 --><van-uploader file-list"{{ file }}" bind:after-read"afterRead" max-count"{{3}}" deletable"{{ true…...

拥抱AIGC浪潮,亚信科技将如何把握时代新增量?

去年底&#xff0c;由ChatGPT带起的AIGC浪潮以迅雷不及掩耳之势席卷全球。 当互联网技术的人口红利逐渐消退之际&#xff0c;AIGC就像打开通用人工智能大门的那把秘钥&#xff0c;加速开启数智化时代的到来。正如OpenAI CEO Sam Altman所言&#xff1a;一个全新的摩尔定律可能…...

【opencv】指定宽或高按比例缩放图片 拼接图片

指定宽或高按比例缩放图片 import cv2def resize_by_ratio(image, widthNone, heightNone, intercv2.INTER_AREA):img_new_size None(h, w) image.shape[:2] # 获得高度和宽度if width is None and height is None: # 如果输入的宽度和高度都为空return image # 直接返回原图…...

使用C#加载TOOLBLOCK

前言 因为Vpp文件类型包含了以下三种 QuickBuidJobToolBlock 不同类型的打开方式不同&#xff0c;需要提前知道vpp是什么类型 例如 这个TB.vpp文件是TOOLBLOCK&#xff0c;就不能直接在visionpro中打开&#xff08;直接打开需要QuickBuid文件&#xff09;&#xff0c; 可以…...

MPAS-A原理及陆面模式的基本概念

跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff0c;分别称为 MPAS-A&#xff08;大气模型&#xff09;、MPAS-O&#xff08;海洋模型&…...

前端技术Html,Css,JavaScript,Vue3

Html 1.基本标签 <h1>最大的标题</h1> <h2> . . . </h2> <h3> . . . </h3> <h4> . . . </h4> <h5> . . . </h5> <h6>最小的标题</h6><p>这是一个段落。</p> <br> &#xff08;换…...

实战项目——多功能电子时钟

一&#xff0c;项目要求 二&#xff0c;理论原理 通过按键来控制状态机的状态&#xff0c;在将状态值传送到各个模块进行驱动&#xff0c;在空闲状态下&#xff0c;数码管显示基础时钟&#xff0c;基础时钟是由7个计数器组合而成&#xff0c;当在ADJUST状态下可以调整时间&…...

【es6】对象解构赋值

es6中对象解构赋值&#xff1a; 代码 let { foo: baz } { foo: rose, bar: jeck }; baz // "rose"let obj { first: tom, last: rose }; let { first: f, last: l } obj; f // tom l // roselet { foo: baz } { foo: rose, bar: jeck }中的foo:baz部分&#xff…...

腾讯云服务器CVM标准型S6详细介绍_性能测评

腾讯云服务器CVM标准型S6实例是最新一代的标准型实例&#xff0c;CPU采用Intel Xeon Ice Lake处理器&#xff0c;主频2.7GHz&#xff0c;睿频3.3GHz&#xff0c;内存采用最新 DDR4&#xff0c;默认网络优化&#xff0c;最高内网收发能力达1900万pps&#xff0c;最高内网带宽可支…...

时间序列预测任务下探索深度学习参数对模型预测性能的影响

时间序列相关的项目在我之前的很多博文中都有涉及&#xff0c;覆盖的数据领域也是比较广泛的&#xff0c;很多任务或者是项目中往往是搭建出来指定的模型之后就基本完成任务了&#xff0c;比较少去通过实验的维度去探索分析不同参数对模型性能的影响&#xff0c;这两天正好有时…...

React Dva项目 简单引入models中的所有JS文件

我们前面接触的 Dva项目 models目录下的文件还要一个一个引入 其实体验并不是很好 而且如果项目很大那就比较麻烦了 我们可以在 models 下创建一个 index.js 文件 编写代码如下 const context require.context("./", false, /\.js$/); export default context.key…...

ROS入门-第 1 章 ROS概述与环境搭建

目录 第 1 章 ROS概述与环境搭建 1.1 ROS简介 1.1.1 ROS概念 1.1.2 ROS设计目标 1.1.3 ROS发展历程 1.3 ROS快速体验 1.3.1 HelloWorld实现简介 1.3.2 HelloWorld&#xff08;C版&#xff09; 步骤 1&#xff1a;创建工作空间 步骤 2&#xff1a;创建发布者节点 步骤…...

spring之AOP简单介绍

1.AOP的概念 AOP&#xff0c;Aspect Oriented Programming&#xff0c;面向切面编程&#xff0c;是对面向对象编程OOP的升华。OOP是纵向对一个 事物的抽象&#xff0c;一个对象包括静态的属性信息&#xff0c;包括动态的方法信息等。而AOP是横向的对不同事物的抽象&#xff0c;…...

使用Spark ALS模型 + Faiss向量检索实现用户扩量实例

1、通过ALS模型实现用户/商品Embedding的效果&#xff0c;获得其向量表示 准备训练数据&#xff0c; M (U , I, R) 即 用户集U、商品集I、及评分数据R。 &#xff08;1&#xff09;商品集I的选择&#xff1a;可以根据业务目标确定商品候选集&#xff0c;比如TopK热度召回、或…...

Jmeter入门之digest函数 jmeter字符串连接与登录串加密应用

登录请求中加密串是由多个子串连接&#xff0c;再加密之后传输。 参数连接&#xff1a;${var1}${var2}${var3} 加密函数&#xff1a;__digest &#xff08;函数助手里如果没有该函数&#xff0c;请下载最新版本的jmeter5.0&#xff09; 函数助手&#xff1a;Options > …...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...

mcts蒙特卡洛模拟树思想

您这个观察非常敏锐&#xff0c;而且在很大程度上是正确的&#xff01;您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些&#xff0c;您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”&#xff0c;这个观察非…...

5. TypeScript 类型缩小

在 TypeScript 中&#xff0c;类型缩小&#xff08;Narrowing&#xff09;是指根据特定条件将变量的类型细化为更具体的过程。它帮助开发者编写更精确、更准确的代码&#xff0c;确保变量在运行时只以符合其类型的方式进行处理。 一、instanceof 缩小类型 TypeScript 中的 in…...

基于微信小程序的作业管理系统源码数据库文档

作业管理系统 摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和微信小程序来完成对系统的…...