刷题
文章平均质量分 86
日常刷题题解
爱跑步的程序员~
大家好,我是一名大二的后端开发学生,专注于Java、Spring Boot、Spring Cloud、高并发和微服务。我热衷于数据结构和算法,并在GitHub上分享我的开源项目。我在CSDN上记录和分享我的学习过程。我相信编程是解决问题和创造价值的工具。欢迎关注我,一起学习,一起进步!
展开
-
牛客 括号区间匹配
这道题目要求我们找出在给定的由括号组成的字符串中,最少需要插入多少个括号才能让所有括号正确配对。我们可以使用动态规划的方法来解决这个问题。动态规划的状态定义为dp[i][j]表示从位置i到位置j的子串需要插入的最少括号数。状态转移方程基于两种情况:如果s[i]和s[j]能配对(即它们分别是左右括号),则dp[i][j]取决于从i+1到j-1的子串所需的最少括号数。如果s[i]和s[j]不能直接配对,则我们需要考虑将子串分割成更小的部分,并计算每部分所需的最少括号数。原创 2024-06-21 23:45:00 · 702 阅读 · 0 评论 -
P4170 [CQOI2007] 涂色
对于这道题,我们采用动态规划的策略来解决。问题的关键在于找到如何将大的子问题分解为更小的子问题,并且定义状态转移方程。具体来说,我们可以定义dp[i][j]表示将第i到第j个位置涂色所需要的最小次数。如果s[i]==s[j],那么dp[i][j]可以等于dp[i][j-1],因为最后一步涂j位置的颜色时,可以直接覆盖之前在j-1位置的颜色;否则,我们需要考虑所有可能的分割方式,即在i和j之间找到一个k,使得dp[i][j]等于dp[i][k]+dp[k+1][j]的最小值。原创 2024-06-21 17:37:34 · 731 阅读 · 0 评论 -
第七届蓝桥杯大赛软件赛省赛Java 大学C组题解
我们从0开始,对于每一个可能的a,我们枚举所有可能的b,c和d,使得aa + bb + cc + dd等于给定的数。这是一个动态规划问题。如果s[i]等于s[j],那么dp[i][j]就等于dp[i+1][j-1]+2,因为我们可以在dp[i+1][j-1]表示的回文序列的两端添加s[i]和s[j],形成一个更长的回文序列。如果s[i]不等于s[j],那么dp[i][j]就等于dp[i+1][j]和dp[i][j-1]中的较大值,因为我们可以删除s[i]或s[j],使得剩下的字符串成为一个更长的回文序列。原创 2024-03-24 13:50:14 · 899 阅读 · 0 评论 -
第六届蓝桥杯大赛软件赛省赛Java 大学C组题解
我们使用一个循环来遍历所有的骰子,然后在每一次循环中,我们都会更新我们的动态规划矩阵。这个问题的关键在于,我们的移动是在一个特殊的格子系统中进行的,其中每一行的移动方向可能会改变。这个问题是要找出1到10000之间的所有数字,这些数字的立方的尾部数字与原数字相同。例如,如果数字是12,它的立方是1728,尾部两位数字是12,与原数字相同。这个问题是要找出1到1000之间的第一个数字,这个数字的平方和立方的每一位数字都是唯一的,并且0到9的每个数字都在这个数字的平方或立方中至少出现一次。原创 2024-03-23 11:29:45 · 1168 阅读 · 0 评论