- 浏览: 1653777 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
问题描述:
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
1 2 3 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。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。
Input
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
Output
输出最长区域的长度。
Sample Input
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Sample Output
25
分析及代码实现:
这个问题应该来说是个简单的,很容易想到用动态规划去做的题目。这个问题满足最有子结构
是比较容易看出来。非常容易建立如下递归式:
如果从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
那么我们很容易写出递归的:
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 && i < r && j >= 0 && j < c;
- }
下边就是以lookup方式写的动态规划实现的从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+dy[k])){//如果没有越界
- if(h[i][j] > h[ i+dx[k] ][ j+dy[k] ]){//如果顺着该侧可以滑
- temp = dis(i+dx[k],j+dy[k]);//递归求dis(i+dx[k],j+dy[k]),并保存在临时变量temp中
- dis_sk[i][j] = dis_sk[i][j] > temp ? dis_sk[i][j] : temp + 1;//如果dis_sk[i][j]比temp小,则取temp+1
- }
- }
- }
- return dis_sk[i][j];
- }
最后是main函数,取dis(i,j)的最大者就是所求的最长区域的长度:
- int main(){
- int max_dis = 0;
- int temp;
- int i,j;
- cin >> r >> c;
- for(i = 0; i < r; i++)
- for(j = 0; j < c; j++){
- cin >> h[i][j];
- dis_sk[i][j] = 0;
- }
- for(i = 0; i < r; i++)
- for(j = 0; j < c; j++){
- temp = dis(i,j);
- max_dis = max_dis > temp ? max_dis : temp;
- }
- cout << max_dis + 1 << endl;
- return 0;
- }
发表评论
-
二分查找之变型题目
2010-10-24 12:40 2158二分查找算法在各个公司的笔试面试题大量出现,通常不是简单一眼就 ... -
一道笔试题(创新工厂)解法
2010-10-21 17:44 1855一个帖子http://www.iteye.com/topic/ ... -
[zz]大数据量,海量数据 处理方法总结
2010-08-27 22:24 2273大数据量的问题是很多面试笔试中经常出现的问题,比如baidu ... -
Trie and suffix array
2010-04-13 20:54 1927字典数Trie和后缀数组suffix array是处理字符串操 ... -
金币问题
2009-11-09 08:41 2018今年某公司的笔试题: 一个矩阵地图,每一个元素值代表金币数, ... -
楼梯问题
2009-11-09 08:19 1577hl给我的几道某公司的算法题: 1、 有个 100 级的 ... -
一道考察模拟乘法的题目
2009-11-07 22:37 1422今天hl和我讨论一道题目: 写道 整形数组如a={1,4, ... -
链表归并
2009-11-07 21:40 1038以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过 ... -
找出出现次数超过一半的数字
2009-11-07 21:23 1891hl同学问我一道这个题,想了一种方法,感觉还是不错的,只扫描一 ... -
有道难题以超低分晋级
2009-06-10 11:36 1568有道难题比赛居然晋级了,可以领到一个t-shirt。 -
逆序数/逆序数对
2009-06-09 23:17 3785逆序数是个常遇到的问题,主要有两种解法: O(n^2)的方法: ... -
有道难题topcoder
2009-05-31 23:55 2461今天做了有道topcoder的题目,也是第一次在topcode ... -
百度之星第一场题目
2009-05-31 00:03 3654由于不符合参赛条件,未能参加百度之星,看了题目还挺有意思,把题 ... -
一个对字符串很好的Hash函数ELFHHash
2009-05-03 21:41 2282#include<stdio.h> #defin ... -
最大流Ford-Fulkerson算法
2009-04-22 17:33 9687算法导论对最大流算法有很详细的介绍,今天实现了最大流Ford- ... -
大数/高精度加减乘除取模[收藏]
2009-04-16 19:38 5068#include <iostream> #i ... -
带重复数字的全排列
2009-04-16 18:58 3894上次gx同学问我一道又重复数字的全排列的问题,我当时用set保 ... -
差分约束系统
2009-04-15 16:00 3747(本文假设读者已经有以下知识:最短路径的基本性质、Bellma ... -
二分图匹配
2009-04-15 15:40 3730二分图最大匹配的匈牙利算法 二分图是这样一个图,它的顶点可以分 ... -
线段树
2009-03-24 10:58 1688把问题简化一下: 在自然数,且所有的数不大于30000的 ...
相关推荐
算法设计与动态规划 动态规划是一种常用的算法设计方法,它可以解决许多复杂的问题。动态规划的基本思想是将问题分解成多...但是,我们需要具备良好的问题分析和解决能力,以及丰富的算法设计经验来解决动态规划问题。
标题中的“动态规划算法poj1088滑雪实验报告”指的是使用动态规划算法解决北京大学ICPC在线测评系统POJ中编号为1088的滑雪问题。这个问题旨在通过一个直观的应用实例,帮助学习者深入理解动态规划的概念,并熟练运用...
记忆化搜索--动态规划入门《滑雪》AC代码 自己写
中国滑雪手套行业最新发展动态分析 - **智能化趋势**:部分企业开始尝试将智能技术应用于滑雪手套,如集成加热功能或健康监测传感器等。 - **环保材料应用**:越来越多的企业采用可回收或生物降解材料,响应绿色...
1. **需求分析**:通过对滑雪场日常运营的具体需求进行分析,明确系统的功能目标和技术要求。 2. **概要设计**:在此基础上制定出系统的总体设计方案,包括模块划分、架构选择、技术栈确定等内容。 3. **详细设计**...
在这个背景下,可能是指通过对室内滑雪场这一细分市场的深入分析,来洞察整个冰雪产业或融创中国的发展前景。 “初探室内滑雪场赛道”意味着我们将讨论的是一个新兴且具有潜力的市场领域——室内滑雪设施。随着冰雪...
(5.6-2020)滑雪游戏skiing.zip项目unity源码下载(5.6-2020)滑雪游戏skiing.zip项目unity源码下载 1.适合学生学习研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
基于springboot滑雪场管理系统 | java | springboot | 滑雪场管理系统代码 | 网站 1、技术栈:springboot,vue,ajax,maven,mysql,MyBatisPlus 2、系统的实现 用户信息 图片素材 视频素材 摘 要 I 目 录 III ...
在IT领域,动态规划是一种强大的算法,用于解决各种复杂的问题,尤其在优化和搜索问题上表现卓越。这里我们将深入探讨动态规划与C++语言的结合,通过标题和描述中的实例来解析这一领域的关键知识点。 首先,让我们...
综上所述,这个编程问题可能是一个关于路径规划的挑战,要求参赛者通过动态规划和递归算法来寻找滑雪者从起点到终点的最佳路径。具体实现可能涉及构建一个状态空间,并用递归进行深度探索,同时利用动态规划来避免...
* 1088 滑雪:本题目使用动态规划来计算滑雪的最短距离。 * 1125 Stockbroker Grapevine:本题目使用动态规划来计算股票交易的最大收益。 * 1141 Brackets Sequence:本题目使用动态规划来计算括号序列的最长长度。 ...
2017-2022年滑雪装备行业市场研究及发展前景预测报告.pdf
- **主要内容**:报告全面分析了中国滑雪行业的现状和发展趋势,重点关注2020年的行业变化及其对未来的影响。 #### 二、核心观点与行业规模 - **市场规模**:至2019年底,中国滑雪产业市场规模接近900亿元人民币。 ...
标题中的“滑雪”通常在信息学竞赛中是一个模拟或图论问题,可能涉及到路径规划、最短路径算法或者动态规划等算法。这类问题通常要求参赛者编写程序来解决特定的滑雪场景,比如从山顶到山脚下的最短时间路径、避免...
"社交滑雪驱动算法"是一种利用社会网络数据和滑雪运动特性相结合的算法模型,它主要应用于数据分析、用户行为预测以及优化用户体验等领域。在这个压缩包文件中,我们可能找到了关于该算法的详细资料,其中包括一个名...
动态生成地图的技术通常涉及算法设计,如分块加载、随机种子等,能够有效降低内存占用,提高游戏性能。 曲线地图的设计是滑雪游戏中的核心要素,它要求开发者具备对物理引擎的深入理解以及对2D图形绘制的熟练掌握。...
《小游戏源码-圣诞节滑雪挑战》是一款以圣诞为主题的滑雪竞速游戏,其源码提供了丰富的学习和开发资源。本文将详细解析此游戏源码中的关键知识点,帮助读者深入理解游戏编程的基本原理和技术。 首先,我们要知道...
标题中的“ACM滑雪问题&解答”指的是在...总的来说,ACM滑雪问题是一个典型的动态规划问题,它要求参赛者运用递归和记忆化搜索技巧来高效求解。理解和熟练掌握这种算法对于参加ACM竞赛或者提升编程技能都非常重要。
- **动态规划**:本问题的核心在于利用动态规划的思想,通过递归地计算每个位置的最大路径长度,并将其存储起来,以备后续使用,避免了重复计算。 - **状态定义**:状态定义为当前位置的最大路径长度,状态转移方程...