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

广州app制作网站关键词优化方法

广州app制作,网站关键词优化方法,北京市建筑信息公开平台,叙述一个网站的建设过程在动态规划中,填表时固定最后一个数还是倒数第二个数,取决于问题的定义和状态转移方程的设计。 目录 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/382387.html

相关文章:

  • 抚顺网站网站建设百度seo查询
  • 简单的装x编程代码seo技术好的培训机构
  • 建网站浩森宇特建站平台有哪些
  • wordpress 需要事务seo网站推广优化就找微源优化
  • 做网站要多少人网站外链有多重要
  • 做网站的内容百度竞价推广收费
  • 网站经常被攻击seo外链平台热狗
  • 济南代做标书网站标志宁波seo网络推广选哪家
  • 动态网站建设题库新闻稿范文300字
  • 做亚马逊网站需要租办公室吗百度推广客户端下载安装
  • 湖南企业建网站正规教育培训机构
  • 用python做购物网站百度推广效果不好怎么办
  • 网站拓扑图怎么做搜索引擎营销推广方案
  • 官方网站下载水印相机深圳市网络seo推广平台
  • 网站优化公司上海网站制作河南
  • 域名备案不是网站公司做的代运营服务
  • 公众号怎么制作流程windows10优化工具
  • 杭州网站建设q479185700棒百度竞价广告点击器
  • 学网站开发看什么书怎么上百度推广产品
  • wordpress能做手机站么seo是怎么优化的
  • 做网站需要注意的事项郑州粒米seo外包
  • 苏州做网站需要多少钱博客网站登录入口
  • 南京商城网站建设企业qq和个人qq有什么区别
  • 微信小程序安装吉林seo基础知识
  • 上海市建设工程咨询奖如何利用seo赚钱
  • 做网站爱网站点击量统计
  • 五华网站开发微信软文是什么意思
  • 武汉网站制作报价国内免费b2b网站大全
  • 网页设计和网站建设百度seo发帖推广
  • 网站logo也叫做网站的培训网址