滑雪路线

Route

联系威尼斯人

Contact weinisiren

手机:HASHKFK
电话:HASHKFK
QQ:HASHKFK
邮箱:HASHKFK
地址:北京市朝阳区
滑雪常识

>>你的位置: 首页 > 滑雪常识

澳门威尼斯人娱乐场-Venetian Macao Casino滑雪问题-课件(PPT·精·选)ppt

2024-10-03 14:58:26

  澳门威尼斯人娱乐场-Venetian Macao Casino(访问: hash.cyou 领取999USDT)

澳门威尼斯人娱乐场-Venetian Macao Casino滑雪问题-课件(PPT·精·选)ppt

  滑雪问题滑雪问题描述 Michael 喜欢滑雪这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 Michael 想知道在一个区域中最长的滑坡(滑坡的长度由滑过点的个数来计算)。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 123 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 一个人可以从某个点滑向上下左右相邻四个点之一, 当且仅当高度减小。在上面的例子中,例如一条可滑行的滑坡为 24-17-16-1 。问题分析?在最长路径的情况下, Ai-Ai-1------A1 ,它的子结构 Ai-1------A0, 也是最优的。所以搜索中如果遇到已经路过的节点,看是否路程长度增大。若是,则该路径有可能成为解,否则直接排出可能性。所以只要保证,每个节点都经历过,便能求得解。?因为不用求路径,所以每个点只用一个数字就可以记录改点是否经过,和该点的最长路程。每次 DFS 前找到点最高且没有经过的节点开始搜索。最后找到记录里最大的值,便是解。简化题目?对于所给出的矩阵找出一条最长的递减链, ?满足链中相邻的两个元素间都是在矩阵中相邻的在这里我们用两种算法来解决该滑雪问题: (1)动态规划算法(2)穷举搜索算法动态规划算法基本思想?动态规划的实质是分治思想和解决冗余,因此, 动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。在求解过程中,该方法也是通过求解局部子问题的解达到全局最优解,但与分治法和贪心法不同的是, 动态规划允许这些子问题不独立,也允许其通过自身子问题的解作出选择,该方法对每一个子问题只解一次,并将结果保存起来,避免每次碰到时都要重复计算。子问题的重叠性动态规划算法的关键在于解决冗余,这是动态规划算法的根本目的。动态规划解题思路?定义 dis_sk[i][j] 表示从点(i,j) 为起点滑行的最大长度。滑行时,选择周围可以滑行的且 dis_sk 值最大的方向滑行。如果(i,j) 的四个相邻元素都存在的话,则可以得到如下递归式: ? dis_sk[i][j] = max{dis_sk[i-1][j],dis_sk[i][j- 1],dis_sk[i+1][j],dis_sk[i][j+1]}+1 ?通过递归地计算? dis_sk[i][j-1], ? dis_sk[i][j+1], ? dis_sk[i-1][j] ? dis_sk[i+1][j] ?的值, 动态规划解题思路找中四个中最大的一个,即是下一步滑行的位置,以此递归,直到不能继续滑行时返回。求解过程中,每求解到一个点的最大滑行长度则保存在数组 dis_sk [i][j] 中,因此不会重复求解同一个点的最大滑行长度。?用两重循环搜索整个矩阵中 dis_sk[i][j] 最大的点, dis_sk[i][j] 就是要求解的最长区域的长度。?那么我们很容易写出递归的: ? int dis(int i,int j) ?{ for(i,j 上侧,下侧,左侧,右侧) if( 该位置没有越界)? { if( 顺着该侧可以往下滑)如果该侧位置可以滑行的距离(递归调用 dis 函数)大于 dis_sk[i][j] ,则把 dis_sk[i][j] 改成该距离+1 }}?把这个递归改成动态规划很容易,只要在开始判断一下 if(dis_sk[i][j]) return dis_sk[i][j]; //dis_sk[i][j] 开始为 0 ?定义的变量如下: ? int h[101][101];// 输入的高度值? int dis_sk[101][101];// 记录了每个点可以滑行的最大距离? int dx[]={-1,1,0,0};// 为了方便上下左右侧的滑行的最大距离而使用的方便数组? int dy[]={0,0,-1,1}; ? int r,c;// 输入的行和列?一个用来判断是否越界的辅助函数: ? bool in_bound(int i,int j){ ? return i = 0 && ir && j = 0 && jc; ?} ?动态规划实现的从 i,j下滑最大距离: ? int dis(int i,int j){ ? int temp; ? if (dis_sk[i][j]) // 如果已经求出来了,直接返回? return dis_sk[i][j]; ? for (int k= 0;k 4; k++){ ? if (in_bound(i+dx[k],j

【返回列表】

搜索您想要找的内容!

首页 | 关于威尼斯人 | 威尼斯人资讯 | 滑雪门票 | 滑雪常识 | 人才招聘 | 在线留言 | 联系威尼斯人 | 滑雪路线 | 精彩图片 |

地址:北京市朝阳区 电话:HASHKFK 手机:HASHKFK

Copyright © 2012-2024 澳门威尼斯人娱乐场-Venetian Macao Casino户外滑雪培训设备有限公司 版权所有 ICP备案编号: