算法【动态规划】 | 【01】二维表结构
文章目录
- 一、问题解决思路:
- 二、问题一:
- 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】二维表结构相关推荐
- python二维表转一维表_Excel、Power BI及Python系列:使用Power BI转化一维表与二维表...
上篇文章,老海分享了如何使用Excel完成一维表与二维表之间的转化 本篇老家继续分享使用Power BI来完成一维表与二维表的转化操作. 可能很多小伙伴,不太了解Power BI Power BI是什 ...
- PowerBI强大的数据汇总能力:将几十张Excel二维表批量转换成一维表进行可视化分析
目录 如何分析单张二维表数据 如何用PowerBI搞定几十张二维表 操作步骤 打开Power BI Desktop,获取数据,自文件夹,选择数据源路径,确定 选择转换数据 保留content列,删除其 ...
- 01背包问题动态规划(二维数组)
01背包问题动态规划(二维数组) 问题描述 一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn,求旅行者能获得 ...
- 菜鸟学算法——动态规划(二)
概述 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法,它是应用数学中用于解决某类最优化问题的重要工具.20世纪 ...
- 深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等
[深度学习入门到进阶]必看系列,含激活函数.优化策略.损失函数.模型调优.归一化算法.卷积模型.序列模型.预训练模型.对抗神经网络等 专栏详细介绍:[深度学习入门到进阶]必看系列,含激活函数.优化策略 ...
- mysql第三章关系模型_一个MySQL关系模型只有三个关系(二维表)组成。_学小易找答案...
[判断题]DELETE语句功能是对表中所有记录或满足条件的记录进行批量删除. [填空题]The computer's entire ____ was on a single board. [单选题]下 ...
- 二维模式(矩阵)匹配(Rabin-Karp算法推广到二维)[转]
本文着重讨论由Rabin-Karp算法推广到二维来解决二维模式匹配问题的算法. 问题: 在一个n1*n2的二维字符组成中搜寻一个给定的m1*m2的模式.参考<算法导论>习题32.2-3. ...
- 数据结构与算法--数组:二维数组中查找
数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...
- 数据建模中的二维表和一维表!
[讨论] 什么是表/一维表/二维表,哪位给个准确的定义 [复制链接] 透视表要求是一维表, 那什么是表.一维表.二维表呢?查了一下午也没有找到准确的定义, 把找到的内容罗列如下: ++++++++++ ...
最新文章
- mui框架提供的相关api
- pythonmainoffset_python之(22)基础总结(5)
- hiho一下 第六周 Hihocoder #1038 : 01背包
- mysql awr flush_Oracle ASH内存强制Flush日志解决一例
- 公众平台模板消息所在行业_第三方工具微信公众号模板消息群发如何操作?
- python数据结构算法 北京大学_北京大学公开课《数据结构与算法Python版》
- 【codevs2333】【BZOJ2002】弹飞绵羊,第一次的LCT
- 21天jmeter打卡day5-完成对www.baidu.com的两条接口测试
- java序列化和反序列化练习
- 接口与抽象类的区别和相同点
- python文本筛选html,从html页面的列表元素中筛选数据
- VISIO使用FPGA时序图、状态机等所需的模具
- 每月一书(202104):《浪潮之巅》
- 简析 React Native 用户反馈功能实现
- 北斗通讯协议4.0 java_北斗4.0协议讲解.doc
- 【Nvivo】什么是定性研究
- 一个很精致的HelloWorld,你看得懂么?
- 人脸识别SVM算法实现--参考麦子学院彭亮机器学习基础5.2
- 移远 BC35-G 模块固件升级
- 星际争霸等待暴雪服务器响应,服务器三个月未恢复正常,垂死挣扎的星际争霸,预示着傲慢的暴雪即将谢幕...
热门文章
- 若依 监控中心monitor的使用
- MicroPython-On-ESP8266——WIFI与网络
- 雅思阅读话题词汇-alluvial
- GNN-CS224W: 6-7 Graph Neural Networks
- 哪一种验证方法最好?形式验证、硬件加速还是动态仿真?
- python 求平方根
- python none什么意思_python – 什么是self = None?
- java多表头导出excel表格_【每日一点】1. Java如何实现导出Excel单表头或多表头
- xtrabackup全量+增量备份
- CC00009.python——|HadoopPython.v09|——|Arithmetic.v09|语法:核心语法运算符.V1|