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

平面设计要什么学历windows优化大师卸载不了

平面设计要什么学历,windows优化大师卸载不了,asp程序网站后台发布产品的时候前台怎么不显示产品名称,做网站什么程序动态规划题 目录 最大乘积子数组股票买卖问题最长递增子序列零钱兑换编辑距离 最大乘积子数组 问题描述 给定一个整数数组,求乘积最大的连续子数组的乘积。 关键点 需要同时记录当前最大值和最小值(负负得正)状态转移方程: …

动态规划题

目录

  1. 最大乘积子数组
  2. 股票买卖问题
  3. 最长递增子序列
  4. 零钱兑换
  5. 编辑距离

最大乘积子数组

问题描述

给定一个整数数组,求乘积最大的连续子数组的乘积。

关键点

  • 需要同时记录当前最大值和最小值(负负得正)
  • 状态转移方程:
    • max_dp[i] = max(nums[i], max_dp[i-1]*nums[i], min_dp[i-1]*nums[i])
    • min_dp[i] = min(nums[i], max_dp[i-1]*nums[i], min_dp[i-1]*nums[i])

C++代码

int maxProduct(vector<int>& nums) {int max_val = nums[0], min_val = nums[0], res = nums[0];for (int i = 1; i < nums.size(); ++i) {int tmp_max = max({nums[i], max_val * nums[i], min_val * nums[i]});int tmp_min = min({nums[i], max_val * nums[i], min_val * nums[i]});max_val = tmp_max;min_val = tmp_min;res = max(res, max_val);}return res;
}

股票买卖问题

通用动态规划思路

  • 状态定义dp[i][k][0/1] 表示第i天,最多交易k次,是否持有股票时的最大利润。
  • 状态转移
    • dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i])
    • dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i])

交易一次(LeetCode 121)

int maxProfit(vector<int>& prices) {int buy = INT_MIN, sell = 0;for (int price : prices) {buy = max(buy, -price);sell = max(sell, buy + price);}return sell;
}

交易无限次(LeetCode 122)

int maxProfit(vector<int>& prices) {int profit = 0;for (int i = 1; i < prices.size(); ++i)if (prices[i] > prices[i-1])profit += prices[i] - prices[i-1];return profit;
}

交易两次(LeetCode 123)

int maxProfit(vector<int>& prices) {int buy1 = INT_MIN, sell1 = 0, buy2 = INT_MIN, sell2 = 0;for (int price : prices) {buy1 = max(buy1, -price);sell1 = max(sell1, buy1 + price);buy2 = max(buy2, sell1 - price);sell2 = max(sell2, buy2 + price);}return sell2;
}

最长递增子序列

动态规划(O(n²))

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;
}

贪心+二分(O(n log n))

int lengthOfLIS(vector<int>& nums) {vector<int> lis;for (int num : nums) {auto it = lower_bound(lis.begin(), lis.end(), num);if (it == lis.end()) lis.push_back(num);else *it = num;}return lis.size();
}

零钱兑换

动态规划

  • 状态定义dp[i]表示凑出金额i所需的最少硬币数。
  • 状态转移dp[i] = min(dp[i], dp[i - coin] + 1)
int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, amount + 1);dp[0] = 0;for (int i = 1; i <= amount; ++i)for (int coin : coins)if (coin <= i)dp[i] = min(dp[i], dp[i - coin] + 1);return dp[amount] > amount ? -1 : dp[amount];
}

编辑距离

动态规划

  • 状态定义dp[i][j]表示将word1i个字符转换为word2j个字符的最小操作数。
  • 状态转移
    • word1[i-1] == word2[j-1]dp[i][j] = dp[i-1][j-1]
    • 否则:dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-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];elsedp[i][j] = 1 + min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]});return dp[m][n];
}
http://www.dtcms.com/wzjs/393722.html

相关文章:

  • mysql 视频网站开发社会化媒体营销
  • 供应商门户网站无锡seo网站管理
  • 武进网站建设方案站长之家站长工具
  • 我做网站可以赚钱吗百度云资源链接分享群组
  • 企业官网怎么和别的网站做链接合肥百度推广优化
  • led 网站建设软文营销的宗旨是什么
  • 西安网站制作网站网站搜索
  • 做网站赚钱还是企业宣传片seo营销服务
  • 武汉企业如何建网站10常用的网络营销方法
  • 合作做网站百度浏览器网站入口
  • 怎么做创意短视频网站香蕉和忘忧草对焦虑的影响
  • 制作网站接单怎么开自己的网站
  • 站点建立网站的方法搜索引擎优化的简称
  • 网站建设服务商的网站建设流程培训学校管理制度大全
  • 网站dedecms模板怎么查看修改啊推广文章
  • 淘宝客网站怎么做分销他达拉非片多少钱一盒
  • 福州 网站建设价格晚上偷偷看b站软件推荐
  • 提高审美网站百度投票人气排行榜入口
  • 网站首页可以做竖版吗郑州网站建设用户
  • 攀枝花做网站软文推广文案
  • 网络空间 网站 域名温州最好的seo
  • 网站建设售后服务承诺书关键词排名查询工具有哪些
  • 做网站违法吗sem公司
  • 网站没被收录怎么办收录排名好的发帖网站
  • 东坑仿做网站网站优化排名操作
  • asp网站抓取优化方案
  • 湖南城乡住房建设厅网站下载应用商店
  • 成都网站建设外包公司排名婚恋网站排名前三
  • 网络营销的优势与不足太原seo关键词排名优化
  • 网络营销推广方法和工具有哪些?网站优化入门免费教程