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

算法笔记(十五)—— 动态规划(暴力递归到动态规划)习题训练!

通过递归到记忆化搜索再到严格表结构的动态规划

递归方法的评价:1. 单可变参数的维度;2. 可变参数的个数

记忆化搜索

在暴力递归中会存在很多的重复计算,可以使用存储结构来实现空间换时间。

严格表结构的动态规划

整理位置之间的依赖关系来达到进一步优化的效果。

322. 零钱兑换 - 力扣(LeetCode)https://leetcode.cn/problems/coin-change/

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> count(amount+1 ,amount+1);count[0] = 0;for(auto coin : coins){for(int i = coin ; i<=amount ; i++){count[i] = min(count[i] , count[i-coin]+1);}}return count[amount]==amount+1?-1:count[amount];}
};

518. 零钱兑换 II - 力扣(LeetCode)https://leetcode.cn/problems/coin-change-ii/

class Solution {
public:int change(int amount, vector<int>& coins) {vector<int> count(amount+1 , 0);count[0] = 1;for(auto coin : coins){for(int i = coin ; i<=amount ; i++){count[i] += count[i-coin];}}return count[amount];}
};

剑指 Offer 42. 连续子数组的最大和 - 力扣(LeetCode)icon-default.png?t=N176https://leetcode.cn/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/?envType=study-plan&id=lcof&plan=lcof&plan_progress=jkqqk9t

class Solution {
public:int maxSubArray(vector<int>& nums) {int res = nums[0] , pre = 0;for(auto &num : nums){pre = max(pre+num , num);res = max(res , pre);}return res;}
};

剑指 Offer 47. 礼物的最大价值 - 力扣(LeetCode)icon-default.png?t=N176https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/?envType=study-plan&id=lcof&plan=lcof&plan_progress=jkqqk9t

// class Solution {
// public:
//     int process(vector<vector<int>>& grid , int x , int y , vector<vector<int>>& dp){
//         if(x==grid.size()||y==grid[0].size())return 0;
//         if(dp[x][y]!=0)return dp[x][y];
//         dp[x][y] = grid[x][y] + max(process(grid, x+1, y, dp), process(grid, x, y+1, dp));
//         return dp[x][y];
//     }//     int maxValue(vector<vector<int>>& grid) {
//         vector<vector<int>> dp(grid.size() , vector<int>(grid[0].size() , 0));
//         return process(grid, 0, 0, dp);
//     }
// };class Solution {
public:int maxValue(vector<vector<int>>& grid) {vector<int> dp(grid[0].size()+1 , 0);for(int i = grid.size()-1 ; i>=0 ; i--){for(int j = dp.size()-2 ; j>=0 ; j--){dp[j] = max(dp[j] , dp[j+1]) + grid[i][j];}}return dp[0];}
};

http://www.lryc.cn/news/23463.html

相关文章:

  • 云原生架构基础概念及应用办法
  • RedisTemplate 的基本使用手把手教
  • Hbase -- Compact工具梳理
  • 【java代码审计】SQL注入
  • 前置知识-辛 Runge-Kutta 方法
  • require 与 import 两种引入模块方式到底有什么区别?
  • 软考信息系统监理师备考建议
  • 第八届蓝桥杯省赛——4承压计算(二维数组,嵌套循环)
  • 【ECNU】3645. 莫干山奇遇(C++)
  • 为什么需要学习shell、shell的作用
  • pgsql-Create_ALTER_GRANT_REVOKE命令语法
  • 【linux】:进程概念
  • 创建对象的方式和对属性的操作
  • GO时间相关操作说明
  • 选择和分支结构
  • Elasticsearch总结笔记
  • Ubuntu 安装指定版本 Mysql,并设置远程连接(以安装mysql 5.5 为例)
  • NumPy:Python中的强大数学工具
  • Hbase资源隔离操作指南
  • TPS2012B泰克Tektronix隔离通道示波器
  • 9.4 PIM-DM
  • 程序员推荐的良心网站合集!
  • 信息安全概论之《密码编码学与网络安全----原理与实践(第八版)》
  • 跬智信息全新推出云原生数据底座玄武,助力国产化数据服务再次升级
  • 【离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载】
  • 我的十年编程路 序
  • xs 180
  • 时间序列分析 | BiLSTM双向长短期记忆神经网络时间序列预测(Matlab完整程序)
  • 0101基础-认证授权-springsecurity
  • 一文简单了解THD布局要求