- 浏览: 1656211 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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处理异常
今年某公司的笔试题:
一个矩阵地图,每一个元素值代表金币数,玩家从左上角一直走到右下角,每次只能向下移动一格或是向右移动无数格后向下移动一格。当元素值为-1时,玩家无法移动到此格。玩家每移动到一格就可以获取这一格的金币数,求获得最大金币数。
很容易的一道动态规划题,动态转移方程
m[i][j] = max{m[i-1][j] + a[i][j], m[i-1][k] + a[i-1][j] + a[i][j]} 0 <= k < j
初始化:
#define MIN -1000000 int a[M][N];//金币矩阵 int m[M][N];//最大值矩阵 void init(){ memset(m,0,sizeof(int) * M * n); int i,j,k; int sum = 0; for(i = 0; i < M; i++){//初始化第一列 if(a[i][j] == -1){ m[i][0] = MIN; }else{ sum+=m[i][0]; m[i][0] = sum; } } for(j = 0; j < N; j++){//初始化第一行 if(a[0][j] == -1){ m[0][j] = MIN; }else{ m[0][j] = a[0][j]; } } }
从底往上递推代码:
int max_coin(){ int i,j,k; for(i = 1; i < M; i++) for(j = 1; j < N; j++){ int max = m[i-1][j] + a[i][j]; for(k = 0; k < j; k++){ int coins = m[i-1][k] + a[i-1][j] + a[i][j]; if(coins > max) max = coins; } } return m[M-1][N-1]; }
直接记事本的方式递归,发现已经计算过直接返回的方式:
int max_coin(int i,int j){ if(m[i][j] != 0)//已经计算出来 return m[i][j]; else{ int max = max_coin(i-1,j) + a[i][j]; for(int k = 0; k < j; k++){ t_m = max_coin(i,k) + a[i-1][j] + a[i][j]); if(max < t_m) max = t_m; } return max; } }
评论
7 楼
lcwen08
2010-03-09
"移动到一格才能得到金币,并不是移动经过的路径的金币都可以得到。"
原来如此,
原来如此,
6 楼
fuliang
2010-03-09
lcwen08 写道
(i-1, k)点尽管最大,但它不一定能够到达(i-1, j)点..
这里将无法移动到的格设置到了一个最小值MIN,相当于负无穷,这样可以忽略掉不可到达的格子了,因为凡是移动到不可到达格的方案是不可能在求最大值中取胜的。
5 楼
fuliang
2010-03-09
lcwen08 写道
不过,我又想了想,方程好像应该这样写:
m[i][j] = max { m[i-1][k] + a[i-1][k+1] + ... + a[i-1][j]} + a[i][j]
其中 (0 <= k < j),
这里:
int coins = m[i-1][k] + a[i-1][j] + a[i][j];
(i-1, k)点尽管最大,但它不一定能够到达(i-1, j)点..
m[i][j] = max { m[i-1][k] + a[i-1][k+1] + ... + a[i-1][j]} + a[i][j]
其中 (0 <= k < j),
这里:
int coins = m[i-1][k] + a[i-1][j] + a[i][j];
(i-1, k)点尽管最大,但它不一定能够到达(i-1, j)点..
这个可能是下面这句话你理解的偏差:
引用
玩家每移动到一格就可以获取这一格的金币数
移动到一格才能得到金币,并不是移动经过的路径的金币都可以得到。
4 楼
lcwen08
2010-03-09
不过,我又想了想,方程好像应该这样写:
m[i][j] = max { m[i-1][k] + a[i-1][k+1] + ... + a[i-1][j]} + a[i][j]
其中 (0 <= k < j),
这里:
int coins = m[i-1][k] + a[i-1][j] + a[i][j];
(i-1, k)点尽管最大,但它不一定能够到达(i-1, j)点..
m[i][j] = max { m[i-1][k] + a[i-1][k+1] + ... + a[i-1][j]} + a[i][j]
其中 (0 <= k < j),
这里:
int coins = m[i-1][k] + a[i-1][j] + a[i][j];
(i-1, k)点尽管最大,但它不一定能够到达(i-1, j)点..
3 楼
lcwen08
2010-03-09
哈哈,明白了,原来每次都必须得向下移动一格啊
2 楼
fuliang
2010-03-09
lcwen08 写道
我是初学者,可能考虑的有问题,请指教:
如果m[i][j-1] > m[i-1][j],是不是要取:
m[i][j] = m[i][j-1] + a[i][j] ?
解法中好像不是啊..
如果m[i][j-1] > m[i-1][j],是不是要取:
m[i][j] = m[i][j-1] + a[i][j] ?
解法中好像不是啊..
从m[i][j-1]到m[i][j]是不可达的,所以没有你说的那种情况,原因是题目中说:
每次只能向下移动一格或是向右移动无数格后向下移动一格
1 楼
lcwen08
2010-03-09
我是初学者,可能考虑的有问题,请指教:
如果m[i][j-1] > m[i-1][j],是不是要取:
m[i][j] = m[i][j-1] + a[i][j] ?
解法中好像不是啊..
如果m[i][j-1] > m[i-1][j],是不是要取:
m[i][j] = m[i][j-1] + a[i][j] ?
解法中好像不是啊..
发表评论
-
二分查找之变型题目
2010-10-24 12:40 2163二分查找算法在各个公司的笔试面试题大量出现,通常不是简单一眼就 ... -
一道笔试题(创新工厂)解法
2010-10-21 17:44 1861一个帖子http://www.iteye.com/topic/ ... -
[zz]大数据量,海量数据 处理方法总结
2010-08-27 22:24 2276大数据量的问题是很多面试笔试中经常出现的问题,比如baidu ... -
Trie and suffix array
2010-04-13 20:54 1931字典数Trie和后缀数组suffix array是处理字符串操 ... -
楼梯问题
2009-11-09 08:19 1581hl给我的几道某公司的算法题: 1、 有个 100 级的 ... -
一道考察模拟乘法的题目
2009-11-07 22:37 1426今天hl和我讨论一道题目: 写道 整形数组如a={1,4, ... -
链表归并
2009-11-07 21:40 1044以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过 ... -
找出出现次数超过一半的数字
2009-11-07 21:23 1893hl同学问我一道这个题,想了一种方法,感觉还是不错的,只扫描一 ... -
有道难题以超低分晋级
2009-06-10 11:36 1576有道难题比赛居然晋级了,可以领到一个t-shirt。 -
逆序数/逆序数对
2009-06-09 23:17 3794逆序数是个常遇到的问题,主要有两种解法: O(n^2)的方法: ... -
有道难题topcoder
2009-05-31 23:55 2467今天做了有道topcoder的题目,也是第一次在topcode ... -
百度之星第一场题目
2009-05-31 00:03 3664由于不符合参赛条件,未能参加百度之星,看了题目还挺有意思,把题 ... -
一个对字符串很好的Hash函数ELFHHash
2009-05-03 21:41 2287#include<stdio.h> #defin ... -
最大流Ford-Fulkerson算法
2009-04-22 17:33 9701算法导论对最大流算法有很详细的介绍,今天实现了最大流Ford- ... -
大数/高精度加减乘除取模[收藏]
2009-04-16 19:38 5080#include <iostream> #i ... -
带重复数字的全排列
2009-04-16 18:58 3905上次gx同学问我一道又重复数字的全排列的问题,我当时用set保 ... -
差分约束系统
2009-04-15 16:00 3760(本文假设读者已经有以下知识:最短路径的基本性质、Bellma ... -
二分图匹配
2009-04-15 15:40 3735二分图最大匹配的匈牙利算法 二分图是这样一个图,它的顶点可以分 ... -
线段树
2009-03-24 10:58 1690把问题简化一下: 在自然数,且所有的数不大于30000的 ... -
树状数组
2009-03-24 10:39 2356树状数组是一种非常优雅的数据结构. 当要频繁的对数 ...
相关推荐
【金币阵列问题】是一个经典的计算机算法问题,主要涉及到数组操作和动态规划。在这个问题中,我们有一个m行n列的二维数组,其中数组的每个元素代表一枚金币的状态,0表示正面朝上,1表示背面朝上。游戏的规则允许两...
假金币问题通常涉及到数组或集合中的元素,其中一部分元素代表正常的硬币,而另一部分是假的,具有不同的特性。例如,假金币可能重量不同,或者具有某种特殊标识。目标是找出所有的假金币,而只能通过有限次的操作或...
信息学奥赛一本通1100:金币.mp4
问题描述:有n*m(m,n)枚金币在桌面上排成一个 n 行 m 列的金币阵列。每一枚金币或正面朝上,或背面朝上。 用数字表示金币状态,0表示金币正面朝上,1表示金币背面朝上。 金币阵列的游戏规则是: (1) 每次可将...
【金币阵列问题】是一个经典的计算机科学中的优化问题,它涉及到数组操作和状态转换策略。问题的核心在于如何通过有限次的特定操作将一个给定的金币阵列转换为另一个目标阵列,同时使得操作次数最小。 在这个问题中...
1. **搜索算法**:在解决金币问题时,可能会用到深度优先搜索(DFS)或广度优先搜索(BFS)。例如,如果问题是要找到最优的金币收集路径,那么搜索算法可以遍历所有可能的路径并找到最佳解。 2. **动态规划**:动态...
用C++写的简单的骑士问题,写的一般,望指教。
本文所述的金币问题,是一个典型的循环控制问题,它可以通过编程语言中的循环结构来解决。问题描述中提到的金币发放规则为:“第一天骑士收到1枚金币;之后每增加2天,每天收到的金币数增加1枚。”根据这个规则,...
有m´ n(m £ 100,n £ 100)个金币在桌面上排成一个m行n 列的金币阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。 金币阵列游戏的规则是: (1)每次可将任一行...
过多的动画元素可能会导致性能问题,特别是在移动设备上。因此,开发者需要合理控制金币的数量,优化渲染过程,比如使用精灵表(Sprite Sheet)来减少内存占用和渲染次数。 总的来说,仿淘宝金币掉落撒落动画涉及到...
【金币阵列问题】是一种经典的计算机算法设计与分析的题目,它主要涉及到数组处理、动态规划、最优化问题等核心算法概念。在这个问题中,我们通常假设有一个二维金币阵列,每个位置上都有一定数量的金币,目标是设计...
QT学习之翻金币源代码及参考资料是一份针对QT框架的学习资源,特别适合对QT感兴趣的初学者和开发者。这个小游戏展示了如何使用C++编程语言...同时,提供的参考资料将进一步辅助理解和学习过程,帮助解决遇到的问题。
### 算法设计求金币阵列问题解析 #### 问题背景与定义 在一个由`m×n`(其中`m ≤ 100`, `n ≤ 100`)个金币组成的矩阵中,每个金币可以是正面朝上(表示为`0`)或者背面朝上(表示为`1`)。玩家的目标是从一个...
假金币问题是其中的一个典型案例。在这个问题中,银行需要从M组金币中识别出每组的假金币,每组至少有一个假金币且重量不同,同时银行只有一架天平可以用来比较两组金币的重量。蛮力法在这个问题中的应用是遍历所有...
除此之外,还有一些其他类型的逻辑问题,如飞机加油问题、推理对话、强盗分金币问题、自然数和的推理、烧绳子计时、果冻抓取、称水问题、岔路口问题、天平找不同重量球的问题、画直线问题、时针分针秒针重合问题,...
"淘金币抵钱怎么用"这个问题涉及到淘宝购物过程中的一个关键环节,即如何有效地利用淘金币进行支付抵扣。 淘金币的使用规则如下: 1. **获取方式**:淘金币主要通过在淘宝购物、参与店铺活动、签到、浏览商品、评价...
淘金币助手1是一款专为淘宝用户设计的辅助工具,旨在帮助用户更轻松地管理和获取淘宝平台上的淘金币。淘金币是淘宝网推出的一种虚拟货币,用户可以通过参与...了解如何正确处理这类问题对于确保软件顺利运行至关重要。
【Python小游戏源码-接金币游戏游戏源码】 ...同时,这个过程也能帮助你提升编程技巧,包括逻辑思维、问题解决以及代码优化等方面。如果你对游戏开发感兴趣,那么从这个简单的项目开始,无疑是一个很好的起点。