leetcode282周赛T4(需要加性质的DP)

银河麒麟V11 + KVM/QEMU + GT 710 GPU直通 Win10 完整操作流程文档 宿主机:RTX 5080专门运行ollama大模型服务,通过SSH/VNC远程管理Win10虚拟机:GT 710直通,物理键盘专属,通过物理显示器处理视频应用硬件隔离:两个系统完全隔离,互不干扰,性能最大化两种不同的直通方式直通方式 配置方法 设备在宿主机的状态 典型应用场景PCIe设备直通 vfio-pci.ids=10de:128b,10de:0e0f 设备完全从宿主机消失,被vfio-pci驱动接管 GPU、网卡、NVMe硬盘。 阅读详情

在这里插入图片描述
在这里插入图片描述

DFS分析

  • naive思路:在每个结点选择轮胎。
  • 但只要发生改变,如果深度相同只需要记录当前深度往下的搜索结果即可。(记忆化搜索)
  • 从该节点回溯到第一个连续的轮胎,该轮胎的使用一定是同样步骤中耗费最小的

最优子结构

  • 第一个轮胎选择后连续使用到第j场,则j+1场到最后时间也是最优
  • 令dp[i],完成i后缀的比赛所用时间最小值,则考虑肯定更换轮胎的时间(暂且不考虑边界情况)
    dp[i]=minP轮胎,j步{dp[i+j]+changeTime+P轮胎使用j步的最小时间}dp[i] = min_{P轮胎,j步}\{dp[i+j] + changeTime + P轮胎使用j步的最小时间\}dp[i]=minPj{dp[i+j]+changeTime+P使j}
  • j有上界。这是因为同一个轮胎,当frx−1>=changetime+ffr^{x-1} >= changetime +ffrx1>=changetime+f肯定要更换轮胎。
  • 没有考虑到的点:提前预处理求最小值。
  • 总结:使用DP时,要注意拆解的小部分是否是原先问题的子问题。例如此题更换轮胎剩下的部分就是子问题,而仅仅确定第一个轮胎后后续的并不是子问题。其次把DP方程写下,别空想。并且预处理。

实现

class Solution {
public:
    int minimumFinishTime(vector<vector<int>>& tires, int changeTime, int numLaps) {
        int pre[21];
        for(int i = 0;i<21;i++)
            pre[i] = 1e10;
        for(int  i = 0;i<tires.size();i++)
        {
            int f = tires[i][0];
            int r = tires[i][1];
            int ret;
            int co = 1;
            int sum = 0;
            while(co <= 20)
            {
                ret = f;
                sum+=ret;
                while(co <= 20 && ret < f + changeTime)
                {
                    pre[co] = min(pre[co],sum);
                    ret *= r;
                    if(ret < f + changeTime)
                        sum += ret;
                    co++;
                }
                if(co <= 20)
                    sum += changeTime;
            }
        }
        int dp[numLaps];
        dp[numLaps - 1] = pre[1];
        for(int i = numLaps  -2;i>=0;i--)
        {
            dp[i] = 1e10;
            for(int j = i + 1 ; j - i <= 20 && j <= numLaps;j++)
            {
                if(j < numLaps)
                {
                    dp[i] = min(dp[i],dp[j] + changeTime + pre[j - i]);
                }
                else
                    dp[i] = min(dp[i],pre[j - i]);
            }
        }
        return dp[0];
    }
};
【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

相关推荐

【Unity工具篇】| Unity项目中如何使用LuBan插件,详细集成步骤

前面写了一篇文章用于介绍LuBan的下载及快速使用方法:【Unity实战篇】| 实用插件LuBan,快速上手使用 本篇文章就来介绍一下将LuBan集成到自己的Unity项目的方法。 看完本篇文章之后,就可以直接把LuBan插件放到自己项目中进行配表和使用。

努力前行,总会成为自己心中的那道光 2万+

LeetCode 190T4. 两个子序列的最大点积

题目 给你两个数组 nums1 和 nums2 。 请你返回 nums1 和 nums2 中两个长度相同的 非空 子序列的最大点积。 数组的非空子序列是通过删除原数组中某些元素(可能一个也不删除)后剩余数字组成的序列,但不能改变数字间相对顺序。比方说,[2,3,5] 是 [1,2,3,4,5] 的一个子序列而 [1,5,3] 不是。 示例 1: 输入:nums1 = [2,1,-2,5], nums2 = [3,0,-6] 输出:18 解释:从 nums1 中得到子序列 [2,-2] ,从 nums2 中

weixin_45649181的博客 269

Asap2-editor(V1.3.4.0)

Vspy的ASAP2

LeetCode 5250. 检查「好数组」(161-T4

原题链接 思路:主要就是裴蜀定理(在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理,裴蜀定理得名于法国数学家艾蒂安·裴蜀。裴蜀定理说明了对任何整数 a、b和它们的最大公约数 d ,关于未知数 x 和 y 的线性丢番图方程(称为裴蜀等式)),在这道题目上的体现就是当一个数与另一个数(可能是另外子集的最小公倍数)的最小公倍数为1,则为题目要求的”好数组”,否则就不满足”好数组”。 public boolean isGoodArray(int[] nums) { int n = nu

汪汪汪汪吁的博客 186

【AGC005D】~K Perm Counting(计数抽象成图)

注意到位置为id,权值为v ,不合法的情况,当且仅当 v = id+k或 v= id-k。dp(i,j,pd)表示考虑到第i号点, 连了j条边,是否有连接i 到 i-1号点。因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一条边,可以构成二分图。由此可知,当选了n条边,就恰好n个位置不合法,限制条件是:连的边不能相邻,求出f(m) ,f(m)指代至少有m个位置不合法的方案数。由此总共有2n 个点 k 条链,链与链之间无边 互不干涉。把二分图展开成k条链,进行dp。简单的乘法原理罢了。

2301_77025310的博客 3953

力扣(合并区间)

给定一组可能重叠或相邻的整数区间,合并所有重叠或端点相接的区间,返回不重叠的最小区间列表。例如输入 [[1,3],[2,6],[8,10],[15,18]],输出 [[1,6],[8,10],[15,18]]。核心是先按左端点升序排序,再单次线性扫描完成合并,避免暴力两两比较。

weixin_52811458的博客 295

LeetCode 155. 最小栈|Python 解法详解

这道题的关键是:使用主栈保存数据,辅助栈在每一层同步保存“截至当前位置的最小值”。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

a1250467048的博客 232

LeetCode //MySQL - 1204. Last Person to Fit in the Bus

This SQL query solves the problem of finding the last person who can board a bus without exceeding the 1000 kg weight limit. The solution involves: Calculating a running total of weights ordered by boarding turn using a window function Filtering to only in

Made in Code 363

LeetCode 1. 两数之和 | 从暴力枚举到哈希表最优解 + 空间换时间思想全复盘

文章摘要 题目要求在数组中找到两数之和等于目标值的下标。核心思路是优化查找效率: 暴力法:双重循环枚举所有数对,时间复杂度O(),效率低但易实现。 哈希表优化:利用哈希表O(1)查找特性,遍历时存储已访问元素,每次计算差值并查询,时间复杂度降至O(n)。关键细节是先查后存,避免自匹配。 代码实现:哈希表法通过一次遍历完成,空间换时间,边界处理需注意空数组和不足两元素的情况。 常见错误:内层循环起始点、哈希表键值设计、立即返回结果等易错点需警惕。 面试要点:优先选择哈希表解法,解释与暴力法的差异,强调时间

yc2284238579的博客 253

leetcode】153. 寻找旋转排序数组中的最小值js

本文介绍了在旋转排序数组中寻找最小值的二分查找算法。通过比较中间元素与数组末尾元素,可以确定最小值所在区间:若中间值大于末尾值,则最小值在右侧;否则在左侧或当前位置。文章提供了两种实现方式,第一种通过样例总结返回nums[l],第二种采用更标准的二分写法,确保循环结束时left==right。两种方法时间复杂度均为O(logn),适用于解决LeetCode相关题目。关键点在于利用旋转数组的特性缩小搜索范围。

2402_83244812的博客 149

LeetCode //C - 1203. Sort Items by Groups Respecting Dependencies

This problem involves sorting items with group constraints and dependency relations. The key steps are: Assign unique groups to items with no group (-1) Build dependency graphs for both items and groups Perform topological sorting on both graphs If both so

Made in Code 372

10.LeetCode算法习题讲解--滑动窗口--最大连续为一的个数

利用滑动窗口解决最大连续1的个数

Jammy_1的博客 216

LeetCode hot100——最大子数组和

给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。nums = [1]123如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的求解。

weixin_42927227的博客 210

LeetCode 3597.分割字符串

时间复杂度:O(n) 或 O(n∣Σ∣),其中 n 是 s 的长度,∣Σ∣=26 是字符集合的大小。空间复杂度:O(n) 或 O(n∣Σ∣)。只要当前段是唯一的,就将其入段列表,标记为已经出现过,并从下一个下标开始构建新的段。因此,最终输出为 [“a”, “b”, “bc”, “c”, “cc”, “d”]。输出: [“a”,“b”,“bc”,“c”,“cc”,“d”]因此,最终输出为 [“a”, “aa”]。输入: s = “abbccccd”输入: s = “aaaa”输出: [“a”,“aa”]

tus00000的博客 221

栈和队列专题(三):LeetCode 622. 设计循环队列|数组环形复用 + front/rear 边界详解

本文详细讲解了循环队列的设计与实现,重点分析了如何利用数组实现环形结构以避免空间浪费。文章首先通过示例说明普通数组队列的"假溢出"问题,然后提出循环队列的解决方案。核心内容包括:1. 采用牺牲一个存储位置的方案区分队列空满状态;2. 明确front和rear指针的语义(front指向队首元素,rear指向下一个可插入位置);3. 使用取模运算实现下标的循环移动。文章完整实现了LeetCode 622题要求的全部接口,并分析了各种边界情况,特别是队尾元素的获取方法。最后对比了数组实现与链式

Luminousone的博客 465

LeetCode //C - 1202. Smallest String With Swaps

Summary: This problem involves finding the lexicographically smallest string achievable by swapping characters at given indices any number of times. The key idea is to use Union-Find to group all swappable indices into connected components. Characters with

Made in Code 345

LeetCode 28. 找出字符串中第一个匹配项的下标(暴力匹配 + KMP 算法详解)

本文介绍了LeetCode 28题"找出字符串中第一个匹配项的下标"的两种解法:暴力匹配和KMP算法。暴力匹配通过逐个字符比较实现,时间复杂度O(m×n);KMP算法利用next数组跳过不必要匹配,时间复杂度O(m+n)。文章详细解释了KMP的核心思想,包括next数组的定义和构建过程,并提供了Python和Java的代码实现。两种方法各具特点:暴力匹配简单直观,KMP更高效但实现复杂,适合处理长字符串匹配问题。

2603_95532426的博客 224

LeetCode算法题精讲】二叉搜索树(BST)精讲:验证二叉搜索树 + 二叉搜索树的最近公共祖先

摘要: 本文深入解析二叉搜索树(BST)的核心特性——有序性,通过LeetCode 98(验证BST)和235(BST最近公共祖先)两道经典题目,揭示BST的解题逻辑。98题强调全局有序性,需通过中序遍历或递归区间法验证;235题则利用BST有序性实现高效自顶向下搜索。文章对比了BST与普通二叉树的操作差异,提供Python/Java/C++三语言代码实现,并延伸至BST家族题(搜索、插入、删除、第K小元素)。核心结论:BST的有序性是其高效操作的基础,理解并应用这一特性是解决相关问题的关键。

2401_88352165的博客 369

leetcode】33.搜索旋转排序数组js

本文介绍了在旋转排序数组中查找目标值的二分搜索算法。通过分析四种可能情况(mid值和目标值分别位于左右两段的不同组合),将问题转化为常规二分搜索或特殊指针移动。当mid值和目标值位于同一段时按常规二分处理;位于不同段时根据相对位置调整搜索方向。算法时间复杂度为O(log n),适用于部分有序数组的快速查找。文章附有JavaScript实现代码和情况分类表格,清晰展示了处理逻辑。

2402_83244812的博客 310

LeetCode 142. 环形链表 II|Python 解法详解

这道题的关键是:快慢指针相遇后,根据距离关系,从头节点和相遇点各放一个同速指针,它们再次相遇的位置就是环入口。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

a1250467048的博客 198

LeetCode hot 100 —41. 缺失的第一个正数

普通数组-5-困难

Canmido的博客 224
上一篇: CSP认证202109T3-脉冲神经网络(优化)
下一篇: CSP认证202104T4-校门外的树(DP)
nth2000
博客等级 码龄7年 60粉丝 · 130原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值