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

力扣10.18

1463. 摘樱桃 II

给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。

你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。

请你按照如下规则,返回两个机器人能收集的最多樱桃数目:

  • 从格子 (i,j) 出发,机器人可以移动到格子 (i+1, j-1),(i+1, j) 或者 (i+1, j+1) 。
  • 当一个机器人经过某个格子时,它会把该格子内所有的樱桃都摘走,然后这个位置会变成空格子,即没有樱桃的格子。
  • 当两个机器人同时到达同一个格子时,它们中只有一个可以摘到樱桃。
  • 两个机器人在任意时刻都不能移动到 grid 外面。
  • 两个机器人最后都要到达 grid 最底下一行。

数据范围

  • rows == grid.length
  • cols == grid[i].length
  • 2 <= rows, cols <= 70
  • 0 <= grid[i][j] <= 100

分析

使用记忆化搜索来解决,令dfs(i,j,k)表示机器人1,2分别从(i,j)和(i,k)处开始到最后一行的樱桃数目最大值,容易得到

  • d f s ( i , j , k ) = m a x ( d f s ( i + 1 , j − 1 , k − 1 ) , d f s ( i + 1 , j , k − 1 ) , d f s ( i + 1 , j + 1 , k − 1 ) , . . . . d f s ( i + 1 , j + 1 , k + 1 ) ) dfs(i,j,k)=max(dfs(i+1,j-1,k-1),dfs(i+1,j,k-1),dfs(i+1,j+1,k-1),....dfs(i+1,j+1,k+1)) dfs(i,j,k)=max(dfs(i+1,j1,k1),dfs(i+1,j,k1),dfs(i+1,j+1,k1),....dfs(i+1,j+1,k+1))

代码

class Solution {
public:const static int N = 105;int dp[N][N][N];int n, m;int dfs(int i, int j, int k, vector<vector<int>>& grid) {if(i < 0 || i >= n || j < 0 || j >= m || k < 0 || k >= m) return 0;if(i == n) return 0;int& t = dp[i][j][k];if(t != -1) return t;int c;if(j == k) c = grid[i][j];else c = grid[i][j] + grid[i][k];t = 0;for(int z1 = -1; z1 <= 1; z1 ++ ) {for(int z2 = -1; z2 <= 1; z2 ++ ) {t = max(t, dfs(i + 1, j + z1, k + z2, grid));}}t += c;return t;}int cherryPickup(vector<vector<int>>& grid) {n = grid.size();m = grid[0].size();memset(dp, -1, sizeof(dp));return dfs(0, 0, m - 1, grid);}
};

3193. 统计逆序对的数目

给你一个整数 n 和一个二维数组 requirements ,其中 requirements[i] = [endi, cnti] 表示这个要求中的末尾下标和 逆序对 的数目。

整数数组 nums 中一个下标对 (i, j) 如果满足以下条件,那么它们被称为一个 逆序对:

  • i < j 且 nums[i] > nums[j]

请你返回 [0, 1, 2, ..., n - 1]
排列perm 的数目,满足对 所有 的 requirements[i] 都有 perm[0..endi] 恰好有 cnti 个逆序对。

由于答案可能会很大,将它对 109 + 7 取余 后返回。

数据范围

  • 2 <= n <= 300
  • 1 <= requirements.length <= n
  • requirements[i] = [endi, cnti]
  • 0 <= endi <= n - 1
  • 0 <= cnti <= 400
  • 输入保证至少有一个 i 满足 endi == n - 1
  • 输入保证所有的 endi 互不相同。

分析

记忆化收缩,令dfs(i,j)表示perm[0]到perm[i]的逆序对数量为j的排列个数,首先对req数组进行预处理,若在i处没有逆序对要求,则将其req设为-1,否则设为对应的值,接下来分两种情况讨论

  • 若i-1处req[i-1]>=0(有要求): d f s ( i , j ) = d f s ( i , j ) + = d f s ( i − 1 , r e q [ i − 1 ] ) dfs(i,j) =dfs(i,j) +=dfs(i-1,req[i-1]) dfs(i,j)=dfs(i,j)+=dfs(i1,req[i1])
  • 若i-1处req[i-1]==-1(无要求): d f s ( i , j ) + = ∑ k = 0 m i n ( i , j ) d f s ( i − 1 , j − k ) , dfs(i,j)+=\sum_{k=0}^{min(i,j)}dfs(i -1,j-k), dfs(i,j)+=k=0min(i,j)dfs(i1,jk),k为因为第i个数增加的逆序对个数
    对于dfs函数,若传入参数一样,则接下来的过程也一样,这就是为什么能用记忆化搜索优化的原理,这样保证所有的状态都只计算一遍
    接下来考虑剪纸
  • 对有要求的情况,
    • 由于前面只有i-1个数,因此若增加第i个数,也只能增加至多i-1个逆序对(第i个数比前面的数都小),若 r e q [ i − 1 ] + i − 1 < j req[i-1]+i-1<j req[i1]+i1<j(此时无论如何都到达不了j个逆序对的状态),此时可以直接返回0
    • j < r e q [ i − 1 ] j<req[i-1] j<req[i1](当前逆序对比前一个状态还少),也是不合法的,返回0
      最后递归边界就是dfs(0,0)=1(0长度0个逆序对的排列个数只有空集)
      代码还附加了递推的写法

代码

typedef long long LL;
class Solution {
public:const static int N = 405, mod = 1e9 + 7;LL dp[N][N]; // 前i个出现j个逆序对int req[N];LL dfs(int x, int cnt) {if(x == 0 && cnt == 0) return  dp[x][cnt] = 1;LL &t = dp[x][cnt];if(t != -1) return t;t = 0;if(x >= 1 && req[x - 1] >= 0) {if(req[x - 1] + x - 1 < cnt || cnt < req[x - 1]) return t = 0;t += dfs(x - 1, req[x - 1]);} else {for(int i = 0; i <= min(x, cnt); i ++ ) {if(x >= 1) t += dfs(x - 1, cnt - i);t %= mod;}   }t %= mod;return t;}LL numberOfPermutations(int n, vector<vector<int>>& requirements) {memset(req, -1, sizeof(req));// memset(dp, -1, sizeof(dp));int maxx = 0;for(auto k : requirements) {req[k[0]] = k[1];maxx = max(maxx, k[1]);}dp[0][0] = 1;for(int i = 1; i < n; i ++ ) {for(int j = 0; j <= maxx; j ++ ) {if(req[i - 1] >= 0) {if(req[i - 1] + i < j || req[i - 1] > j) {dp[i][j] = 0;continue;}dp[i][j] += dp[i - 1][req[i - 1]];dp[i][j] %= mod;} else {for(int k = 0; k <= min(i, j); k ++ ) {dp[i][j] += dp[i - 1][j - k];dp[i][j] %= mod;}}}}return dp[n - 1][maxx];// return dfs(n, maxx);}
};

相关文章:

力扣10.18

1463. 摘樱桃 II 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。 你有两个机器人帮你收集樱桃&#xff0c;机器人 1 从左上角格子 (0,0) 出发&#xff0c;机器人 2 从右上角格子 (0, cols-1) 出发。 请你按照如下规则…...

cs木马图形化界面出现问题处理

一个月多月没用cs木马了&#xff0c;发现打开客户端之后显示不出图形化界面&#xff0c;且出现下面这样的报错。 、 最后发现是java版本的问题&#xff0c;kali的java自动更新了。把原来的openjdk11改到了openjdk23。 解决方法&#xff1a; 输入&#xff1a; sudo update-…...

数据结构与算法 - 树 #数的概念 #二叉树 #堆 - 堆的实现/堆排序/TOP-K问题

文章目录 前言 一、树 (一)、概念 1、树的定义 (二)、树的定义 1、树为什么是递归定义的&#xff1f; 2、如何定义树(如何表达一棵树) 解决方案一&#xff1a;假设我们得知该树的度 解决方案二&#xff1a;顺序表 解决方案三&#xff1a;左孩子右兄弟表示法 二、二叉…...

Git推送被拒

今天开发完成一个新的需求&#xff0c;将自己的分支合并到test分支后&#xff0c;推送到远程仓库&#xff0c;结果显示推送被拒&#xff1a; 原因是因为有人更新了test分支的代码&#xff0c;我在合并之前没有拉取最新的test分支代码&#xff0c;所以他提示我“推送前需要合并…...

Jmeter进行http接口测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文主要针对http接口进行测试&#xff0c;使用jmeter工具实现。 Jmeter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较…...

工业相机详解及选型

工业相机相对于传统的民用相机而言&#xff0c;具有搞图像稳定性,传输能力和高抗干扰能力等&#xff0c;目前市面上的工业相机大多数是基于CCD&#xff08;Charge Coupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。 一&#xff0c;工业相机的分类 …...

RAID 矩阵

在架构设计中&#xff0c;RAID矩阵&#xff08;RAID Log&#xff09;是一个用于项目管理和风险管理的工具&#xff0c;帮助团队有效管理和跟踪项目中可能影响成功交付的关键因素。与存储技术中的 RAID 不同&#xff0c;这里的 RAID 是一个缩写&#xff0c;代表&#xff1a; R:…...

详细分析Redisson分布式锁中的renewExpiration()方法

目录 一、Redisson分布式锁的续期 整体分析 具体步骤和逻辑分析 为什么需要递归调用&#xff1f; 定时任务的生命周期&#xff1f; 一、Redisson分布式锁的续期 Redisson是一个基于Redis的Java分布式锁实现。它允许多个进程或线程之间安全地共享资源。为了实现这一点&…...

实验3,网络地址转换

实验3&#xff1a;网络地址转换 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握NAT技术的工作原理&#xff0c;了解三种不同类型NAT技术的主要作用以及各自的主要应用环境。能够完成静态NAT和复用NAT技术的应用&#xff0c;并熟练掌握NAT技术相关的配置命令。 实验设…...

Java 中的 String 字符串是不可变的

文章目录 什么是不可变字符串&#xff1f;举个例子直观理解 不可变的原理1. 内部实现2. 字符串常量池3. 线程安全 为什么要设计成不可变&#xff1f;什么时候用可变字符串&#xff1f;示例 总结推荐阅读文章 在 Java 编程中&#xff0c;字符串&#xff08;String&#xff09;是…...

计算机网络架构实例

小型企业网络 1. 终端设备&#xff1a; - 员工的台式电脑和笔记本电脑&#xff0c;用于日常办公&#xff0c;如文档处理、邮件收发、业务软件使用等。 - 智能手机和平板电脑&#xff0c;方便员工在外出或移动办公时也能接入公司网络&#xff0c;查看邮件和处理紧急事务。 2.…...

Chrome与Firefox浏览器HTTP自动跳转HTTPS的解决方案

一、背景介绍 随着网络安全意识的不断提高&#xff0c;越来越多的网站开始采用HTTPS协议&#xff0c;以确保数据传输的安全性。然而&#xff0c;有时用户在浏览网页时&#xff0c;可能会遇到HTTP请求被自动跳转至HTTPS的情况导致网站打不开&#xff0c;提示安全问题&#xff0…...

众数信科荣登“2024 CHINA AIGC 100”榜单

2024年10月17日&#xff0c;由非凡产研推出的「2024 CHINA AIGC 100」榜单隆重发布&#xff0c;众数信科凭借领先的企业AI智能体解决方案能力荣登榜单。 非凡产研AIGC 100 评选旨在挖掘国内具有高潜力的AI应用&#xff0c;为AI产业的高质量发展注入新动力。榜单覆盖了教育、医疗…...

【AI知识】距离度量和相似性度量的常见算法

本文介绍一些AI中常见的距离度量和相似性度量算法&#xff1a; 1. 欧几里得距离&#xff08;Euclidean Distance&#xff09; 欧几里得距离是最常见的距离度量方法&#xff0c;用来计算两个向量之间的“直线距离”&#xff0c;也被成为L2范数。 公式如下&#xff0c;其中 x…...

LeetCode1004.最大连续1的个数

题目链接&#xff1a;1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09; 1.常规解法&#xff08;会超时&#xff09; 遍历数组&#xff0c;当元素是1时个数加一&#xff0c;当元素是0时且已有的0的个数不超过题目限制时&#xff0c;个数加一&#xff0c;若上…...

Parallels Desktop20虚拟机软件能让你在Mac上无缝运行Windows

Code 生成器&#xff1a;Parallels Desktop 20最新版本虚拟机的奇妙世界 &#x1f31f;【轻松跨越操作系统界限】&#x1f31f; 你是否常常感到在Mac和Windows之间切换太麻烦&#xff1f;Parallels Desktop 20最新版&#xff0c;让你不再为跨系统操作而烦恼。这款虚拟机软件能让…...

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }...

Spring 实现 3 种异步流式接口,干掉接口超时烦恼

大家好&#xff0c;我是小富&#xff5e; 如何处理比较耗时的接口&#xff1f; 这题我熟&#xff0c;直接上异步接口&#xff0c;使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性&#xff0c;处理结果仅返回单个值。在某…...

字节 HLLM 论文阅读

github连接&#xff1a;https://github.com/bytedance/HLLM 探讨问题&#xff1a; 推荐LLM的三个关键问题&#xff1a; LLM预训练权重通常被认为是对世界知识的概括&#xff0c;其对于推荐系统的价值&#xff1f;对推荐任务进行微调的必要性&#xff1f;LLM是否可以在推荐系统…...

Chromium html<iframe>对应c++接口定义

HTML <iframe> 标签 使用 <iframe> 标签 在当前 HTML 文档中嵌入另一个文档&#xff1a; <!DOCTYPE html> <html> <body><h1>iframe 元素</h1><iframe src"https://www.w3school.com.cn" title"W3School 在线教…...

Ubuntu 上安装 ComfyUI(NVIDIA GPU / Conda / CUDA 12.1)

这份教程适用于&#xff1a;UbuntuNVIDIA 显卡使用 Conda 管理环境使用 PyTorch CUDA 12.1从源码启动 ComfyUI一、准备条件开始前请确认&#xff1a;已安装 Anaconda 或 Miniconda电脑已正确安装 NVIDIA 驱动终端里执行 nvidia-smi 能看到显卡信息系统可以正常访问 GitHub二、安…...

SEO_本地商家必备的SEO实战方法

SEO对本地商家的重要性 在当今数字化时代&#xff0c;为了在竞争激烈的市场中脱颖而出&#xff0c;本地商家必须掌握一些SEO&#xff08;搜索引擎优化&#xff09;技巧。SEO不仅可以提升网站的搜索引擎排名&#xff0c;还能够有效地吸引更多的本地客户。本文将详细探讨本地商家…...

NaViL-9B开箱即用:无需下载权重,一键体验图片理解和文本对话

NaViL-9B开箱即用&#xff1a;无需下载权重&#xff0c;一键体验图片理解和文本对话 1. NaViL-9B镜像概述 NaViL-9B是上海人工智能实验室研发的原生多模态大语言模型&#xff0c;支持纯文本问答和图片理解双重能力。这个预置镜像的最大特点是开箱即用——所有模型权重文件已内…...

OpenClaw+千问3.5-9B:个人数字资产管理自动化系统

OpenClaw千问3.5-9B&#xff1a;个人数字资产管理自动化系统 1. 为什么需要个人数字资产管理 我的电脑桌面常年堆满截图、临时下载的PDF和来路不明的压缩包。上周找一份三个月前的会议记录时&#xff0c;不得不在十几个名为"新建文件夹(1)"的目录里大海捞针。这种混…...

告别 Thread.stop():并发编程的最高礼仪——两阶段终止模式

告别 Thread.stop()&#xff1a;并发编程的最高礼仪——两阶段终止模式各位正在死磕并发编程的同学们&#xff0c;大家平时在学习多线程时&#xff0c;可能都看到过书上的一句警告&#xff1a;“千万不要使用 Thread.stop() 来停止线程&#xff0c;它是极其危险且已被废弃的”。…...

射频微波放大器指标简略

以下是射频微波功率放大器关键指标结合工程实践和理论基础的简略&#xff1a;一、功率指标1. 输出功率&#xff08;P_{out}&#xff09;- 饱和输出功率&#xff08;P_{sat}&#xff09;&#xff1a;放大器能达到的最大功率&#xff0c;此时效率最高但失真严重。 - 1dB压缩点功…...

鸿子铭:电脑上录视频后出现这个电流声得怎么处理?

大家好&#xff0c;我是鸿子铭。可能我们在电脑上做视频的时候可能会电流声&#xff0c;或者说我们在录视频之后&#xff0c;它也会出现这个沙沙这个声音。出现这个问题&#xff0c;我们该如何去解决呢&#xff1f;其实解决的方法有两点&#xff0c;在电脑上只要调试这两点的话…...

实测!用AI从0到1完成一个项目,需要多少token?

用AI编程工具&#xff0c;从零撸图书管理系统全记录现在全网都在聊AI写项目&#xff0c;但没人说真话&#xff1a;纯靠聊天瞎怼需求&#xff0c;到底浪费多少token&#xff1f;步骤乱不乱&#xff1f;代码能不能直接跑&#xff1f;今天不玩虚的&#xff0c;全程实测飞算JavaAI智…...

STC15单片机入门避坑指南:手把手教你用查询法实现带按键控制的流水灯(附Proteus工程)

STC15单片机实战避坑指南&#xff1a;从按键消抖到精准延时的流水灯设计精要 第一次点亮LED时的兴奋感&#xff0c;往往会被按键失灵、灯光乱跳的现实浇灭。作为STC15单片机入门的第一个综合实验&#xff0c;按键控制流水灯看似简单&#xff0c;却暗藏诸多新手陷阱。本文将用真…...

解密KV Cache:为什么它能提升大模型推理速度3倍以上?

KV Cache技术深度解析&#xff1a;如何让大模型推理速度飞跃提升&#xff1f; 在自然语言处理领域&#xff0c;大模型推理速度一直是开发者关注的焦点。想象一下&#xff0c;当你向AI助手提问时&#xff0c;如果每次响应都需要等待数秒甚至更久&#xff0c;用户体验将大打折扣。…...