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

广州app制作惠州seo排名

广州app制作,惠州seo排名,软装设计培训班哪家好,武汉论坛建站模板在动态规划中,填表时固定最后一个数还是倒数第二个数,取决于问题的定义和状态转移方程的设计。 目录 1. 固定最后一个数 适用场景 特点 示例 2. 固定倒数第二个数 适用场景 特点 示例 3. 固定最后一个数与倒数第二个数的对比 4. 总结 1. 固定最…

        在动态规划中,填表时固定最后一个数还是倒数第二个数,取决于问题的定义和状态转移方程的设计。


目录

1. 固定最后一个数

适用场景

特点

示例

2. 固定倒数第二个数

适用场景

特点

示例

3. 固定最后一个数与倒数第二个数的对比

4. 总结


1. 固定最后一个数

适用场景

  • 当问题的解与以某个位置为结尾的子问题相关时,通常固定最后一个数。

  • 例如:最大子数组和、最长递增子序列(LIS)等问题。

特点

  • 状态定义通常为 dp[i],表示以第 i 个元素为结尾的最优解。

  • 状态转移方程通常依赖于前一个状态(dp[i-1])或前面所有状态。

示例

  • 最大子数组和
    状态定义:dp[i] 表示以 nums[i] 为结尾的最大子数组和。
    状态转移:dp[i] = max(nums[i], dp[i-1] + nums[i])
    代码:

    int maxSubArray(vector<int>& nums) {int dp = nums[0], res = dp;for (int i = 1; i < nums.size(); i++) {dp = max(nums[i], dp + nums[i]);res = max(res, dp);}return res;
    }
  • 最长递增子序列(LIS)
    状态定义:dp[i] 表示以 nums[i] 为结尾的最长递增子序列长度。
    状态转移:dp[i] = max(dp[i], dp[j] + 1),其中 j < i 且 nums[j] < nums[i]
    代码:

    int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums.size(), 1);int res = 1;for (int i = 1; i < nums.size(); i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = max(dp[i], dp[j] + 1);}}res = max(res, dp[i]);}return res;
    }

2. 固定倒数第二个数

适用场景

  • 当问题的解与子问题的中间状态相关时,通常固定倒数第二个数。

  • 例如:最长公共子序列(LCS)、编辑距离等问题。

特点

  • 状态定义通常为 dp[i][j],表示前 i 个元素和前 j 个元素之间的某种关系。

  • 状态转移方程通常依赖于 dp[i-1][j-1]dp[i-1][j] 或 dp[i][j-1]

示例

  • 最长公共子序列(LCS)
    状态定义:dp[i][j] 表示字符串 A 的前 i 个字符和字符串 B 的前 j 个字符的最长公共子序列长度。
    状态转移:

    if (A[i-1] == B[j-1]) {dp[i][j] = dp[i-1][j-1] + 1;
    } else {dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
    }

    代码:

    int longestCommonSubsequence(string text1, string text2) {int m = text1.size(), n = text2.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (text1[i-1] == text2[j-1]) {dp[i][j] = dp[i-1][j-1] + 1;} else {dp[i][j] = max(dp[i-1][j], dp[i][j-1]);}}}return dp[m][n];
    }
  • 编辑距离
    状态定义:dp[i][j] 表示将字符串 A 的前 i 个字符转换为字符串 B 的前 j 个字符所需的最小操作次数。
    状态转移:

    if (A[i-1] == B[j-1]) {dp[i][j] = dp[i-1][j-1];
    } else {dp[i][j] = min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]}) + 1;
    }

    代码:

    int minDistance(string word1, string word2) {int m = word1.size(), n = word2.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));for (int i = 0; i <= m; i++) dp[i][0] = i;for (int j = 0; j <= n; j++) dp[0][j] = j;for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (word1[i-1] == word2[j-1]) {dp[i][j] = dp[i-1][j-1];} else {dp[i][j] = min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]}) + 1;}}}return dp[m][n];
    }

3. 固定最后一个数与倒数第二个数的对比

特性固定最后一个数固定倒数第二个数
适用问题子数组、子序列问题双序列、矩阵类问题
状态定义dp[i] 或 dp[i][j]dp[i][j]
状态转移依赖前一个状态或前面所有状态依赖 dp[i-1][j-1] 等中间状态
典型问题最大子数组和、LISLCS、编辑距离

4. 总结

  • 固定最后一个数:适用于子数组或子序列问题,状态转移通常依赖于前一个状态或前面所有状态。

  • 固定倒数第二个数:适用于双序列或矩阵类问题,状态转移通常依赖于中间状态(如 dp[i-1][j-1])。

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

相关文章:

  • 前端开发培训要多少钱seo推广服务哪家好
  • 网站技术架构图产品推广策略
  • 提供完善政府网站建设百度推广创意范例
  • wordpress 一键建站网站建设黄页
  • 做玻璃的网站营销策略范文
  • 网络电话聊天网站建设多少钱桂林网站优化
  • 怎样做汽车网站建设软文发稿公司
  • 亳州建设网站一个网站如何推广
  • 整个网站全部乱码沈阳黄页88企业名录
  • 学生怎么制作网站指数运算法则
  • 哈尔滨网站建设供应商营销企业
  • 个性化定制客户和网站建设roseonly企业网站优化
  • 丽水网站建设seo广告多的网站
  • 淘宝联盟个人网站怎么做网络营销的方式都有哪些
  • wordpress 女性主题成都seo网络优化公司
  • 网站建设丿金手指排名9搜索引擎营销优缺点
  • 设计师互动网站模板建站平台
  • 小企业官方网站制作搜索引擎优化排名培训
  • 网站建设开发案例长沙网站提升排名
  • wordpress 更改自带域名北京优化seo公司
  • 潍坊智能建站模板百度seo关键词优化工具
  • 平面设计教程网站上海做网站优化
  • 网站建设 部署与发布视频教程百度投票人气排行榜入口
  • 自己做网站 有名seo与网络推广的区别和联系
  • 网络网站建设价格啥是网络推广
  • qq企业邮箱登录广州seo公司推荐
  • 古典 网站模板门户网站
  • 西安php网站建设专家市场营销计划方案
  • 做网站开发背景上海怎么做seo推广
  • 登封网站制作网站建设武汉seo培训