牛客竞赛每日俩题 - 动态规划1
目录
DP入门(存储之前状态以简化)
DP解决最短路问题
DP入门(存储之前状态以简化)
拆分词句_牛客题霸_牛客网
思路:
方法:动态规划状态:子状态:前1 , 2 , 3 , ...,n 个字符能否根据词典中的词被成功分词F(i): 前 i 个字符能否根据词典中的词被成功分词状态递推:F(i): true{j <i && F(j) && substr[j,i-j]能在词典中找到 } OR false在j 小于 i 中,只要能找到一个 F(j) 为 true ,并且从 j+1 到 i 之间的字符能在词典中找到,则F(i) 为 true初始值:对于初始值无法确定的,可以引入一个不代表实际意义的空状态,作为状态的起始空状态的值需要保证状态递推可以正确且顺利的进行,到底取什么值可以通过简单的例子进行验证F(0) = true返回结果: F(n)
例如题目样例:
当i==3时 有F[0]==true&&可找到[0,3]中有now,所以canbreak[3]==true;
当i==7时 有F[3]==true&&可找到[3,7]有code,所以canbreak[7]==true;
总结:利用F[i]存之前的状态是否可分割,然后搜索后面有无字符,两者都为true则这个整体可分割
class Solution {
public:
bool wordBreak(string s, unordered_set<string> &dict) {
if(s.empty()) return false;
if(dict.empty()) return false;
vector<bool> canbreak(s.size()+1,false);
canbreak[0]=true;
for(int i=1;i<=s.size();i++)
for(int j=i-1;j>=0;j--){
if(canbreak[j]&&dict.find(s.substr(j,i-j))!=dict.end()){
// F(i): true{j <i && F(j) && substr[j+1,i]能在词典中找到} OR false
canbreak[i]=true;
break;
}
}
return canbreak[s.size()];
}
};
DP解决最短路问题
三角形_牛客题霸_牛客网
状态:子状态:从(0,0) 到 (1,0),(1,1),(2,0),...(n,n) 的最短路径和F(i,j): 从 (0,0) 到 (i,j) 的最短路径和状态递推:F(i,j) = min( F(i-1, j-1), F(i-1, j)) + triangle[i][j]初始值:F(0,0) = triangle[0][0]返回结果:min(F(n-1, i))
方法一:递推法
利用dp算出所有路径,再找最短值
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
if(triangle.empty()) return 0;
vector<vector<int>> minsum(triangle);
int line=triangle.size();
for(int i=1;i<line;i++){
for(int j=0;j<=i;j++){
//处理左右边界
if(j==0) minsum[i][j]=minsum[i-1][j]+triangle[i][j];
else if(j==i) minsum[i][j]=minsum[i-1][j-1]+triangle[i][j];
else{//核心操作
minsum[i][j]=min(minsum[i-1][j],minsum[i-1][j-1])+triangle[i][j];
}
}
}
int res=minsum[line-1][0];//找到最后一行的最短步数
for(int i=1;i<line;i++) res=min(res,minsum[line-1][i]);
return res;
}
};
方法二:逆推法
状态:子状态:从(n,n),(n,n-1),...(1,0),(1,1),(0,0) 到最后一行的最短路径和F(i,j): 从 (i,j)到最后一行的最短路径和状态递推:F(i,j) = min( F(i+1, j), F(i+1, j+1)) + triangle[i][j]初始值:F(n-1,0) = triangle[n-1][0], F(n-1,1) = triangle[n-1][1],..., F(n-1,n-1) = triangle[n-1] [n-1]返回结果:F(0, 0)
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
if(triangle.empty()) return 0;
vector<vector<int>> minsum(triangle);
int line=triangle.size();
// 从倒数第二行开始
for(int i=line-2;i>=0;i--)
{
for(int j=0;j<=i;j++){
minsum[i][j]=min(minsum[i+1][j],minsum[i+1][j+1])+triangle[i][j];
}
}
return minsum[0][0];
}
};
相关文章
- JZ42 连续子数组的最大和
题目: 输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。 本题可以用动态规划来求解。 动态规划:关键就是 记住你之前得到的答案。 解决动态规划问题核…...
2023/5/26 8:45:29 - 字节一面被拒含泪离开,面试官:测试开发连这些都不懂,哭也没用
自我介绍 首先简单介绍一下自己的情况:本科山东大学,专业软件工程。没有任何项目经验,也没有任何科研竞赛经历,有参与过一篇SCI论文在投(不是第一作者,不过没啥用),当过几个学生干部…...
2023/6/2 16:16:08 - 发第一篇SCI有哪些技巧?
正所谓万事开头难,每当第一次做某一件事情总是难以开展的。因为那时我们没有一定的方法和技巧去完成这些事。比如 SCI论文是无数科研人员认可的学术文献,但是想要在SCI期刊上发表论文是十分困难的,因为在论文创作上尚且不成熟,没有…...
2023/6/9 2:37:32 - 平衡二叉搜索树--AVL树
我们之前所学习的二叉搜索树由于可能出现单边树的极端情况,导致效率为O(N)。因此,本文将介绍AVL树即平衡搜索二叉树,将可以有效的避免单边树的情况。 AVL树的概念 当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高…...
2023/6/9 1:17:20 - Jenkins 真得牛逼,只怪你不会用而已~
什么是流水线 jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语法中,流水线过程定义在…...
2023/6/5 1:12:01 - 国内互联网大厂开源贡献排名和他们的github开源主页
粗略统计,按照开源贡献度排名,目前国内阿里的开源项目最多,应用面也最广,百度echart也非常棒 阿里巴巴 https://github.com/alibaba https://github.com/ant-design https://github.com/apache/dubbo 百度 https://github.com/…...
2023/6/5 10:01:58 - 带有 Spring AOP 和自定义注解的 Java 观察者模式
Java 观察者模式的快速概述 Java 观察者模式是 Java 世界中非常知名的解决方案。它的主要目标是实现某种形式的对象交互。特别是,它设计了交互,以便对象可以通知其他依赖对象其状态更改。下图显示了它是如何工作的。 UML 类图以最简单的形式描述了 Java…...
2023/6/5 11:32:42 - string类详解
文章目录1:构造string类1.1:方法1.2:测试2:size和length2.1:用途2.2:测试3:capacity3.1:用途3.2:测试4:clear4.1:用途4.2:测试5:empty5.1:用途5.2:测试6:reserve6.1:用途6.2:测试7:resize7.1:用途7.2:测试8:string的三种遍历8.1:方法一 for循环和[]重载8.2:方法二 迭代器8.2.1:…...
2023/6/7 8:51:19 - Vue-(6)
内容概览 Vuex的使用Vue-router的使用 Vuex的使用 # Vuex是vue的插件,增强了vue的功能 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种…...
2023/6/1 3:27:32 - 三,Git 分支
Git分支 Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。 同时并行推进多个功能开发&am…...
2023/6/3 8:38:18 - 【C语言】初始C语言系列 代码详解 _ 编程入门 _【内附代码和图片】_ [初阶篇 _ 总结复习]
【前言】 本篇文章为初始C语言部分,C语言是编程的入门语言,所以也说是编程入门; 学好C语言的入门内容,才能真正的入门编程,而C语言的学习对于刚入门的同学还是有一些难度的,需要踏踏实实的自己去理解。 在此…...
2023/6/8 16:31:41 - Python应用开发——串口通信
Python应用开发——串口通信 目录Python应用开发——串口通信前言1 环境搭建2 硬件准备3 代码编写与测试3.1 简单测一下串口收发3.2 补充细节3.3 完善整个收发流程结束语前言 在嵌入式开发中我们经常会用到串口,串口通信简单,使用起来方便,且…...
2023/6/6 6:30:01 - 四大含金量高的算法证书考试
证书考试推荐一、PAT 计算机程序设计能力测试二、CCF CSP认证三、团体程序设计天梯赛四、蓝桥杯大赛一、PAT 计算机程序设计能力测试 官网:PAT 计算机程序设计能力测试 PAT为浙江大学出的一款程序设计的测试网站,分为乙级、甲级、顶级三种,…...
2023/6/2 2:59:58 - 修改apk二进制文件工具
AXMLPrinter2.jar 反编译AndroidManifest.xml二进制文件工具AXMLEditor.jar 修改AndroidManifest.xml二进制文件工具ManifestEditor.jar 修改AndroidManifest.xml二进制文件工具baksmali.jar dex转smali工具smali.jar smali转dex工具aapt android自动打包工具 点击下载以上工具…...
2023/5/30 14:59:06 - SpringBoot笔记(一)核心内容
官网:https://spring.io/projects/spring-boot Spring Boot可以轻松创建独立的、基于Spring的生产级应用程序,它可以让你“运行即可”。大多数Spring Boot应用程序只需要少量的Spring配置。 SpringBoot功能: 创建独立的Spring应用程序直接嵌…...
2023/6/6 23:32:35 - STC51单片机学习笔记9——stc12c52 串口显示AD(单路ad+led指示灯)
stc12le5204ad 为8位AD //烧写程序时,一定要选用外部晶振(烧写软件默认为内部晶振(5M~6M)),不然还会影响ADC //烧写时,有时候写不进去,尝试断开地线,然后接上上电 #include<reg5…...
2023/6/8 7:28:29 - LeetCode刷题day27||39. 组合总和40.组合总和II131.分割回文串--回溯
文章目录39. 组合总和题目描述思路分析代码40.组合总和II题目描述思路分析代码131.分割回文串题目描述思路分析代码39. 组合总和 题目描述 题目链接 思路分析 本题还需要startIndex来控制for循环的起始位置,对于组合问题: 如果是一个集合来求组合的话…...
2023/6/8 17:49:40 - 树递归遍历和Mirrors遍历
树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历 前序遍历就是按照根节点-左节点-右节点的顺序完成遍历,他的每一颗子树都遵循这个遍历的顺序,就称为前序遍历 ArrayList<Integer> list new ArrayList<Integer>…...
2023/6/4 15:15:11 - 系统学习SpringFrame:Spring 概述
本篇内容包括:Spring/SpringFrame 概述、Spring IOC 和 AOP 概述、Spring 全家桶内容概述(包括:Spring Boot、Spring Cloud、Spring Cloud data flow …)等内容! 一、Spring/SpringFrame 概述 Spring 是一个生态体系&…...
2023/6/3 12:55:20 - 开源项目 ruoyi-sso-oauth2(一)环境配置
介绍 本项目使用Ruoyi-Vue和Ruoyi-Cloud,实现单点登录和oatuh2授权码模式,提供了前后端实现代码,对代码进行优化 使用redis、不受到二级域名cookie限制,支持分布式,对于第一次接触sso单点登录系统的人员有所帮助,借助…...
2023/5/25 22:55:11
最新文章
- 【Redis28】Redis进阶:配置文件(二)
Redis进阶:配置文件(二) 继续我们的配置文件的学习,上回我们已经学习完了整个 Redis 配置文件的前半部分,今天我们就向后半部分进发。这一部分的内容说实话有更多的内容是更偏门的,都不知道是干嘛用的。还是…...
2023/6/9 12:37:34 - 大学生网络工程想走网络安全方向该怎么规划?
明确需求,确定方向 网络安全 网络安全 是一个很广的概念,涉及的岗位也是非常多的,有安全服务、安全运维、渗透测试、web安全、安全开发、安全售前等等。可以看看下面每个岗位的要求与自身兴趣能力匹配度再决定最适合自己的方向。 渗透测试/Web安全工程师…...
2023/6/9 12:37:07 - 第七章 Electron Vue3实现音乐播放器
一、介绍 🍑 🍑 🍑 一个音乐播放器应该具备播放、暂停、上一首、下一首、播放模式(单曲循环、列表循环、顺序播放……)。除了这些比如还可以扩展进度条的展示、拖拽、音量大小的调节,如果资源允许的话可以…...
2023/6/9 12:36:47 - 【3步教程】如何使用商城小程序源码打造自己的商城?
作为电商行业的领头人,在移动端上拥有一款独立小程序绝对是不能缺少的,而使用商城小程序源码打造自己的商城则是最佳的选择之一。本文将教您如何在3步之内,快速高效地使用商城小程序源码,打造属于自己的小程序商城。 步骤一&…...
2023/6/9 12:35:47 - Netty核心源码剖析(四)
1.Netty心跳(heartbeat)服务源码剖析 1>.Netty作为一个网络框架,提供了诸多功能,比如编码解码等,Netty还提供了非常重要的一个服务–心跳机制heartbeat.通过心跳检查对方是否有效,这是RPC框架中是必不可少的功能.下面我们分析一下Netty内部心跳服务源码实现; 2>.Netty提…...
2023/6/9 12:35:17 - 【算法基础】拓扑排序及实战
一 、概览 这里涉及到图的概念,感兴趣的同学请移驾 –>图<– 下面还有两个相关概念,大概说一下: 1.1 有向无环图 定义:在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是…...
2023/6/9 12:34:56 - 05_MySQL索引优化
四种:1.主键 2.单值 3.唯一 4.复合 1. 性能分析(explain) mysql5.6以后优化器做了很多改进,执行时会自动进行大量的优化,很多现象需要在5.5才能演示成功。 1.1 explain是什么? 模拟优化器查看执行计划 使用EXPLAIN关…...
2023/6/9 12:34:44 - 从零开始的软路由之爱快虚拟机搭建openwrt
缘起 上篇文章我们介绍了爱快软路由的搭建方法,成功了实现了软路由的初级布置——能上网了。接下来就是搭建双软路由中的另一个openwrt了,上期介绍了爱快的特点,主要是用来多拨,分流,流控等操作,在这些方面…...
2023/6/9 12:32:28 - 【matlab数学建模】运用建立的模型分别为这四组游客设计旅行计划
目前的规划是每一次旅行都是从最开始的下水点出发到最终的结束点,开始点到结束 点的河流长度为225公里,且是顺流而下的。游客可选择的交通工具总共有两种,一种是 平均4公里每小时的脚踏公园游船,另-种是平均8公里每小时的螺旋桨电动游船。整个 漂流旅行的总时长从6到18个夜…...
2023/6/9 12:31:55 - 《Kali渗透基础》06. 主动信息收集(三)
kali渗透 1:服务识别1.1:NetCat1.2:Socket1.3:dmitry1.4:nmap 2:操作系统识别2.1:Scapy2.2:nmap2.3:p0f 3:SNMP 扫描3.1:onesixtyone3.2ÿ…...
2023/6/9 12:31:10 - 【Flutter】widgets (6) Stateful Widget 有状态组件的生命周期
文章目录 一、前言二、StatefulWidget的生命周期三、State对象的生命周期四、initState(), didUpdateWidget(), dispose()方法的用途五、StatefulWidget和State对象的生命周期六、代码示例七、总结一、前言 在上一篇文章中,我们初步认识了什么是Stateful Widget 有状态组件。…...
2023/6/9 12:30:58 - SpringBoot resolveMultipart.getFile为null异常报空问题的解决办法
使用 MultipartHttpServletRequest resolveMultipart commonsMultipartResolver.resolveMultipart(request); 出现 resolveMultipart.getFile("file"); 打印null,无法获取文件参数 CommonsMultipartResolver commonsMultipartResolver new CommonsMu…...
2023/6/9 12:30:30 - 智慧园区物业可视化大屏
随着万物互联、数字信息时代的到来,也给物业园区管理行业带来变革性影响。 园区作为城市的基本组成单元,是人口和产业的重要聚集区,现已逐渐成为中国经济转型升级和创新发展的主力。 智慧园区物业可视化整合园区现有信息系统的数据资源&#…...
2023/6/9 12:30:13 - 【算法与数据结构】206、LeetCode 反转链表
文章目录 一、题目二、翻转链表双指针法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、翻转链表双指针法 思路分析:代码首先进行头结点合法性判断,如果是空链表或者仅有一个节点的链…...
2023/6/9 12:30:01 - sql orderby 多条件查询
在 SQL 中,可以使用 ORDER BY 子句进行排序,以对查询结果进行排序。同时,也可以使用多个排序条件,对查询结果进行更加精细的排序。多条件查询需要在 ORDER BY 后面添加多个排序条件,并使用逗号隔开。 例如,…...
2023/6/9 12:29:46 - 千人规模亚马逊云科技出海日将于6月9日开启,助推企业出海出圈
向全球价值链上游奋进 中国企业增强国际竞争力的关键,是努力朝全球价值链上游奋进,发力技术出海。中国的出海新机遇,背后曾是疫情在全球按下数字互联和数字化升级的快进键,跨境电商、在线社交、移动支付、数字服务等数字经济迎来…...
2023/6/9 12:29:22 - 这里推荐几个前端动图icon网站
1. Loading.ioLoading.io 是一个免费的加载动效(Loading animations)图标库。它提供了多种风格的加载动效图标,包括 SVG、CSS 和 Lottie 动画格式。这些加载图标可以增强用户体验,为网站和应用程序添加更佳的视觉效果。 网站地址:loading.io - Your SVG GIF PNG Ajax Loading…...
2023/6/9 12:28:50 - SHELL 脚本定期删除日志文件(日志定期清理)
假设我们的应用每天会产生一个日志文件,但我们并没有对日志文件做任何归档处理,久而久之日积月累,就会将磁盘空间占满,从而影响系统的正常运行。 分析磁盘空间占用情况 #当前磁盘空间占用情况 df -h #当前目录文件大小列表 l…...
2023/6/9 12:28:30 - 肾藏志
出处 《黄帝内经》中多处明确提出 肾藏志 的说法,现举三例: 五脏所藏:心藏神 肺藏魄 肝藏魂 脾藏意 肾藏志 是谓五脏所藏 ( 素问宣明五气篇第二十三 ) 夫心藏神,肺藏气,肝藏血,脾藏肉,肾藏志,而此成形 ( 素问调经论篇第六十二 ) 肾藏精,精舍志 ( 灵枢本神第八 ) 何为志 通过《黄…...
2023/6/9 12:27:38 - 概率论:方差、标准差、协方差、皮尔逊相关系数、线性相关
方差和标准差: 一个随机变量,的值的变化程度可以用方差计算: ;其中 是期望。 我们举个例子: 服从均一分布,取值为0.1,0.2,0.3,0.4,0.5 ,每种值…...
2023/6/9 12:27:23