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

简单flash网站模板巢湖seo推广选哪家

简单flash网站模板,巢湖seo推广选哪家,惠州小程序开发,wordpress 评论 原理以最长递增子序列为例 🎯 首先明确目标 以最长上升子序列(LIS)为例,假设输入是: nums : []int{10, 9, 2, 5, 3, 7, 101, 18}我们定义: dp[i]:以 nums[i] 为结尾的最长上升子序列长度目标&…

以最长递增子序列为例

🎯 首先明确目标

最长上升子序列(LIS)为例,假设输入是:

nums := []int{10, 9, 2, 5, 3, 7, 101, 18}

我们定义:

dp[i]:以 nums[i] 为结尾的最长上升子序列长度

目标:求 dp[i] 的最大值。


🔍 双重 for 的意义是什么?

for i := 1; i < n; i++ {for j := 0; j < i; j++ {if nums[j] < nums[i] {dp[i] = max(dp[i], dp[j] + 1)}}
}

这里我们来解释:

✅ 第一层循环:从左到右遍历每一个位置 i

我们要计算:以 nums[i] 结尾的“最长上升子序列”是多少?

✅ 第二层循环:查看所有在 i 之前的数 j

对于每一个前面的数 nums[j],判断:

它是否可以作为 nums[i] 的前一个元素?
也就是判断 nums[j] < nums[i]

如果是,就说明:

如果我以 j 为结尾的子序列有长度 dp[j]
那么我在它后面加上 nums[i],就可以构成一个更长的上升序列,长度是 dp[j] + 1

于是我们尝试更新 dp[i]

dp[i] = max(dp[i], dp[j] + 1)

🔁 用人话解释一遍:

“我想知道 nums[i] 能不能接在某个前面的上升序列后面,
如果能,那我就更新一下它作为结尾时,能组成多长的子序列。”


🧠 一个具体例子(带注释)

nums := []int{10, 9, 2, 5, 3, 7}初始化 dp := []int{1, 1, 1, 1, 1, 1}  // 每个位置起码是自己i = 3, nums[3] = 5j = 0, nums[0] = 10 -> 跳过j = 1, nums[1] = 9 -> 跳过j = 2, nums[2] = 2 -> 2 < 5 -> 更新 dp[3] = max(1, dp[2] + 1) = 2i = 4, nums[4] = 3j = 0 -> 10 > 3 -> 跳过j = 1 -> 9 > 3 -> 跳过j = 2 -> 2 < 3 -> dp[4] = max(1, dp[2]+1) = 2j = 3 -> 5 > 3 -> 跳过i = 5, nums[5] = 7j = 0 -> 10 > 7 -> 跳过j = 1 -> 9 > 7 -> 跳过j = 2 -> 2 < 7 -> dp[5] = max(1, 1+1) = 2j = 3 -> 5 < 7 -> dp[5] = max(2, 2+1) = 3j = 4 -> 3 < 7 -> dp[5] = max(3, 2+1) = 3

🧩 为什么不能只用一个循环?

因为我们求的是:

“在前面所有满足条件的数里,找一个最优的情况来更新当前的状态”。

只有看完所有的 j < i 才能找到最优的更新路径,所以必须有一个内层循环来“扫描过去”。


✅ 总结记忆方法:

  • i当前状态

  • j过去状态

  • if 条件成立,说明可以从过去 j 走到现在 i

  • dp[i] = max(dp[i], dp[j]+1) 就是取过去所有能转移过来的路径中最优的那一条

for i := 1; i < n; i++ {for j := 0; j < i; j++ {// 某种条件成立// dp[i] = max(dp[i], dp[j] + ...)}
}

这类“双重 for + 状态转移”的写法,在一类特定的动态规划问题中非常经典和高频。这类问题一般具有以下特征:


✅ 典型问题特征

  1. 子问题具有前后关系(i/j 结构)

    • 当前状态 i 要依赖过去某些状态 j < i

    • 类似“前缀分析”

  2. 具有单调性约束

    • nums[j] < nums[i]end[j] <= start[i] 等条件

  3. 求解最大/最小值

    • 求“最长”、“最大收益”、“最多区间”、“最优策略”


✅ 高频问题示例

问题类型描述dp含义转移条件
最长上升子序列 (LIS)找递增的最大长度dp[i]:以 i 结尾的最长长度nums[j] < nums[i]
最长不下降子序列可以等于也递增dp[i]nums[j] <= nums[i]
最长摆动子序列上下起伏交替up[i], down[i]比较大小后转移
最大不重叠区间数按 end 排序后贪心/DPdp[i]:前 i 个的最大区间数end[j] <= start[i]
最大信封嵌套数(俄罗斯套娃)求最多可嵌套信封数对宽升高做 LISw[j] < w[i] && h[j] < h[i]
打家劫舍变形不偷相邻的dp[i]:前 i 个最大金额dp[i] = max(dp[i-1], dp[i-2]+nums[i])
最大连续子数组积需要 max 和 minmax[i], min[i] 同时维护根据乘积正负转移

✅ 模板结构(可抽象成函数)

for i := 1; i < n; i++ {for j := 0; j < i; j++ {if 满足条件(j, i) {dp[i] = max(dp[i], dp[j] + 某个值)}}
}

✅ 小技巧:可以加上前向指针以恢复路径

prev := make([]int, n) // 记录转移路径
for i := range prev {prev[i] = -1
}
...
if dp[j] + 1 > dp[i] {dp[i] = dp[j] + 1prev[i] = j
}

如果你以后看到类似“最XXX的子序列”“最XXX的不重叠区间”,只要是“i依赖j”型的问题,几乎都可以优先尝试这个模板。

http://www.dtcms.com/wzjs/577579.html

相关文章:

  • wordpress用的什么主题查询win10优化大师是官方的吗
  • 承德房地产网站建设wordpress内链
  • wordpress建站教程第六节广州做手机网站建设
  • 做网站有用吗东莞哪些地方是风险区
  • 贷款网站怎么做的制作广告图片的软件app
  • 网站建设小程序开发公司长沙制作网站软件
  • 榆林 网站建设郴州seo排名
  • 网站个人备案步骤wordpress关闭验证码
  • 企业宣传ppt模板博客优化网站seo怎么写
  • 做数据分析好看的网站手袋东莞网站建设
  • 如何自己编写网站怎样制作网页新手自学入门
  • 那些公司做网站比较厉害长治建立公司网站的步骤
  • wordpress建站属于前端基于python的网站开发
  • 网站后台界面品牌网站响应式网站有哪些
  • 杭州的网站建设公司qq邮箱咋与网站绑定提醒
  • 如皋建设网站网站建设公司兴田德润在那里
  • 网站怎么做黑链接同步显示一个wordpress
  • 那个网站平台可以做兼职网站备案账号是什么
  • 成都网站seo诊断python建设网站实例
  • 企业定制网站建设公司在线生成手机网站
  • 活动网站商城网站建设哪个公司好
  • 推荐自助建网站平台东莞百度推广教程
  • wordpress文章名称背景官方进一步优化
  • 全国的网站建设北京环保网站建设
  • 南宁网站设计方案网站建设怎么估算费用和报价
  • 韩国网站模板下载地址风险地区查询最新
  • 百度做网站价格邢台网站建设行情
  • 树莓派做网站服务器怎样网站设计计划书
  • 金华企业网站建站模板如何免费建设一个网站
  • 建设专业网站哪家比较好辽宁建设工程信息网补遗文件