文章目录

  • 一、问题解决思路:
  • 二、问题一:
    • 1、问题描述
    • 2、图文解析
    • 3、递归代码
    • 4、动态规划代码
  • 二、问题二
    • 1、问题描述
    • 2、图文解析
    • 3、递归代码
    • 4、动态规划代码

一、问题解决思路:

先尝试用递归写法 -> 建立数组讲数据缓存到数组中 -> 建立表格结构优化

- 先确定限界条件;
- 根据设定变量构建表格;
- 在根据调用函数需要的状态来确定表格中获取结果的位置【以下图中的★】
- 根据限界条件先将部分表格填充获取去除;
- 在根据其他条件对表格进行填充,至填到★即结果;

二、问题一:

1、问题描述

当在n个位置中,从起始位置到结尾位置必须走k步到达终点,一共有几种走法?

2、图文解析


3、递归代码

/*----------------------------------------------------------------------> File Name: base.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Thu 17 Mar 2022 08:41:03 AM CST
----------------------------------------------------------------------*/#include <iostream>
#include <vector>/*** @param e: 列表长度* @param t: 目标* @param rest: 剩余步数* @param cur: 当前位置* */
int solve(int e, int t, int rest, int cur) {if(rest == 0) {return cur == t ? 1 : 0; }if(cur == 1) {solve(e, t, rest-1, 2);}if(cur == e) {solve(e, t, rest-1, e-1);}return solve(e, t, rest-1, cur+1) + solve(e, t, rest-1, cur-1);
}int main(int argc, char* argv[])
{int step = 4;int target = 4;int cur = 2;std::cout << solve(5, target, step, cur) << std::endl;return 0;
}

4、动态规划代码

/*----------------------------------------------------------------------> File Name: dynamicBase.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Fri 18 Mar 2022 09:14:32 PM CST
----------------------------------------------------------------------*/#include <iostream>/*** @param e: 列表长度* @param t: 目标* @param rest: 剩余步数* @param cur: 当前位置* @param arr: 存储是数据信息* */int solve(int e, int t, int rest, int cur, int arr[][6]) {if(arr[rest][cur] != -1) {return arr[rest][cur];}if(rest == 0) {arr[rest][cur] = cur == t ? 1 : 0; }else if(cur == 1) {arr[rest][cur] = solve(e, t, rest-1, 2, arr);}else if(cur == e) {arr[rest][cur] = solve(e, t, rest-1, e-1, arr);}else {arr[rest][cur] = solve(e, t, rest-1, cur+1, arr) + solve(e, t, rest-1, cur-1, arr); }return arr[rest][cur];
}int main(int argc, char* argv[])
{int arr[6][6];for(int i=0; i<6;++i) {for(int j=0; j<6; ++j) {arr[i][j] = -1;}}int step = 4;int target = 4;int cur = 2;int rt = solve(5, targert, step, cur, arr);std::cout << arr[step][target];return 0;
}

二、问题二

1、问题描述

题中给出数组arr = [3,100,4,50],A、B两人分别从数组中取出数组,只能从最左或者最右取出数值,当列表取完后,比较A、B
两个的累加和判度最大的一方;

2、图文解析

3、递归代码

/*----------------------------------------------------------------------> File Name: base.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Sat 19 Mar 2022 03:40:35 PM CST
----------------------------------------------------------------------*/#include <vector>
#include <iostream>/*** 玩家A、B:A先取列表中【最左或者最右的数,最大的】,在轮到B取;* 后续判断两者取到的数最大* */
int f(std::vector<int> vc, int l, int r);int s(std::vector<int> vc, int l, int r) {if(l == r)return 0;return f(vc, l+1, r) > f(vc, l, r-1) ? f(vc, l+1, r) : f(vc, l, r-1);
}int f(std::vector<int> vc, int l, int r) {if(l == r)return vc[l];return vc[l] + s(vc, l+1, r) > vc[r] + s(vc, l, r-1) ? vc[l] + s(vc, l+1, r) : vc[r] + s(vc, l, r-1);
}int solve(std::vector<int> vc) {return f(vc, 0, vc.size() -1) > s(vc, 0, vc.size()-1) ? f(vc, 0, vc.size() -1) : s(vc, 0, vc.size()-1);
}int main(int argc, char* argv[])
{std::vector<int> vc = {3, 100, 4, 50};std::cout << solve(vc) << std::endl;return 0;
}

4、动态规划代码

/*----------------------------------------------------------------------> File Name: dynamicBase.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Sat 19 Mar 2022 04:14:32 PM CST
----------------------------------------------------------------------*/#include <iostream>
#include <vector>int solve(std::vector<int> vc) {if(vc.empty())return 0;int len = vc.size();int f[len][len] = {0};int s[len][len] = {0};for(int i=0; i<len; ++i) {f[i][i] = vc[i];}int row = 0, col=1;while(col < len) {int i = row;int j = col;while(i < len && j < len) {/* f的位置是选择列表中的值以及s表中的下一行或者前一列的值 */f[i][j] = (vc[i] + s[i+1][j]) > (vc[j] + s[i][j-1]) ? (vc[i] + s[i+1][j]) : (vc[j] + s[i][j-1]);s[i][j] = f[i + 1][j] < f[i][j-1] ? f[i + 1][j] : f[i][j-1];std::cout << "f:" << f[i][j] << " " << i << "-" << j << std::endl;std::cout << "s:" << s[i][j] << " " << i << "-" << j << std::endl;j++;i++;}col++;}return f[0][len-1] > s[0][len-1] ? f[0][len-1] : s[0][len-1];
}int main(int argc, char** argv){std::vector<int> vc = {3, 100, 4, 50};std::cout << solve(vc) << std::endl;return 0;
}

算法【动态规划】 | 【01】二维表结构相关推荐

  1. python二维表转一维表_Excel、Power BI及Python系列:使用Power BI转化一维表与二维表...

    上篇文章,老海分享了如何使用Excel完成一维表与二维表之间的转化 本篇老家继续分享使用Power BI来完成一维表与二维表的转化操作. 可能很多小伙伴,不太了解Power BI Power BI是什 ...

  2. PowerBI强大的数据汇总能力:将几十张Excel二维表批量转换成一维表进行可视化分析

    目录 如何分析单张二维表数据 如何用PowerBI搞定几十张二维表 操作步骤 打开Power BI Desktop,获取数据,自文件夹,选择数据源路径,确定 选择转换数据 保留content列,删除其 ...

  3. 01背包问题动态规划(二维数组)

    01背包问题动态规划(二维数组) 问题描述 ​ 一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn,求旅行者能获得 ...

  4. 菜鸟学算法——动态规划(二)

    概述 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法,它是应用数学中用于解决某类最优化问题的重要工具.20世纪 ...

  5. 深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

    [深度学习入门到进阶]必看系列,含激活函数.优化策略.损失函数.模型调优.归一化算法.卷积模型.序列模型.预训练模型.对抗神经网络等 专栏详细介绍:[深度学习入门到进阶]必看系列,含激活函数.优化策略 ...

  6. mysql第三章关系模型_一个MySQL关系模型只有三个关系(二维表)组成。_学小易找答案...

    [判断题]DELETE语句功能是对表中所有记录或满足条件的记录进行批量删除. [填空题]The computer's entire ____ was on a single board. [单选题]下 ...

  7. 二维模式(矩阵)匹配(Rabin-Karp算法推广到二维)[转]

    本文着重讨论由Rabin-Karp算法推广到二维来解决二维模式匹配问题的算法. 问题: 在一个n1*n2的二维字符组成中搜寻一个给定的m1*m2的模式.参考<算法导论>习题32.2-3. ...

  8. 数据结构与算法--数组:二维数组中查找

    数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...

  9. 数据建模中的二维表和一维表!

    [讨论] 什么是表/一维表/二维表,哪位给个准确的定义 [复制链接] 透视表要求是一维表, 那什么是表.一维表.二维表呢?查了一下午也没有找到准确的定义, 把找到的内容罗列如下: ++++++++++ ...

最新文章

  1. mui框架提供的相关api
  2. pythonmainoffset_python之(22)基础总结(5)
  3. hiho一下 第六周 Hihocoder #1038 : 01背包
  4. mysql awr flush_Oracle ASH内存强制Flush日志解决一例
  5. 公众平台模板消息所在行业_第三方工具微信公众号模板消息群发如何操作?
  6. python数据结构算法 北京大学_北京大学公开课《数据结构与算法Python版》
  7. 【codevs2333】【BZOJ2002】弹飞绵羊,第一次的LCT
  8. 21天jmeter打卡day5-完成对www.baidu.com的两条接口测试
  9. java序列化和反序列化练习
  10. 接口与抽象类的区别和相同点
  11. python文本筛选html,从html页面的列表元素中筛选数据
  12. VISIO使用FPGA时序图、状态机等所需的模具
  13. 每月一书(202104):《浪潮之巅》
  14. 简析 React Native 用户反馈功能实现
  15. 北斗通讯协议4.0 java_北斗4.0协议讲解.doc
  16. 【Nvivo】什么是定性研究
  17. 一个很精致的HelloWorld,你看得懂么?
  18. 人脸识别SVM算法实现--参考麦子学院彭亮机器学习基础5.2
  19. 移远 BC35-G 模块固件升级
  20. 星际争霸等待暴雪服务器响应,服务器三个月未恢复正常,垂死挣扎的星际争霸,预示着傲慢的暴雪即将谢幕...

热门文章

  1. 若依 监控中心monitor的使用
  2. MicroPython-On-ESP8266——WIFI与网络
  3. 雅思阅读话题词汇-alluvial
  4. GNN-CS224W: 6-7 Graph Neural Networks
  5. 哪一种验证方法最好?形式验证、硬件加速还是动态仿真?
  6. python 求平方根
  7. python none什么意思_python – 什么是self = None?
  8. java多表头导出excel表格_【每日一点】1. Java如何实现导出Excel单表头或多表头
  9. xtrabackup全量+增量备份
  10. CC00009.python——|HadoopPython.v09|——|Arithmetic.v09|语法:核心语法运算符.V1|