剑指offer——49礼物的最大价值
题目描述
在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格,知道到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿多少价值的礼物?
思路
首先这里个人认为题目中对于移动的描述有错误,应该是每次向右或者向下移动。这是一道动态规划问题,对于(x,y)处,一定有两种方法到达,(x-1,y)或者(x,y-1)。如果要得到最大的礼物价值,上一步的时候肯定要选最大的。也就是max(f(left),f(up))。在具体的实现里面,这里构建了一个二维数组来存储各个位置所能得到的最大值。
int Dijkstra()
{
int x = v.size(), y = v[].size();
vector<bool>visit(x*y, false);
vector<int>value(x*y, );
value[] = v[][];
for (int i = ; i < x*y; ++i)
{
int index = -, maxV = -;
for (int j = ; j < value.size(); ++j)
{
if (visit[j] == false && maxV < value[j])
{
maxV = value[j];
index = j;
}
}
if (index == -)break;
visit[index] = true;
for (int j = index + ; j < x*y; ++j)//不能向回走
{
int ax = index / y, ay = index % y;
int bx = j / y, by = j % y;
if (visit[j] == false && abs((ax + ay) - (bx + by)) == )
{
if (value[j] < value[index] + v[bx][by])
value[j] = value[index] + v[bx][by];
}
}
}
return value.back();
} int DP()
{
vector<vector<int>>dp(v.size(), vector<int>(v[].size(), ));
dp[][] = v[][];
for (int i = ; i < v[].size(); ++i)
dp[][i] = dp[][i-] + v[][i];
for (int i = ; i < v.size(); ++i)
dp[i][] = dp[i-][] + v[i][];
for (int i = ; i < v.size(); ++i)
for (int j = ; j < v[].size(); ++j)
dp[i][j] = max(dp[i - ][j], dp[i][j - ]) + v[i][j];
return dp[v.size() - ][v[].size() - ];
}
剑指offer——49礼物的最大价值的更多相关文章
- 力扣 - 剑指 Offer 47. 礼物的最大价值
题目 剑指 Offer 47. 礼物的最大价值 思路1 因为是要求最大价值,而且只能移动下方或者右方,因此,每个位置的最大值就是本身的值加上上边 / 左边 中的最大值,然后每次遍历都可以复用上一次的值 ...
- 【Java】 剑指offer(47) 礼物的最大价值
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值( ...
- 每日一题 - 剑指 Offer 47. 礼物的最大价值
题目信息 时间: 2019-07-02 题目链接:Leetcode tag:动态规划 难易程度:中等 题目描述: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0). ...
- 剑指 Offer 47. 礼物的最大价值
题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘及 ...
- 剑指 Offer 49. 丑数 + 小根堆 + 动态规划
剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...
- 力扣 - 剑指 Offer 49. 丑数
题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小 ...
- 【Java】 剑指offer(49) 丑数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 我们把只包含因子2.3和5的数称作丑数(Ugly Number). ...
- [剑指Offer]47-礼物的最大价值(DP)
题目描述 在一个m*n的棋盘每个格有一个礼物,每个礼物有一定价值(>0).从棋盘左上角到右下角,只能向下或向右走,问能拿到的礼物最大价值. 解题思路 dp. 可将二维数组版优化为一维数组版. 代 ...
- 每日一题 - 剑指 Offer 49. 丑数
题目信息 时间: 2019-07-03 题目链接:Leetcode tag:动态规划 小根堆 难易程度:中等 题目描述: 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求 ...
随机推荐
- 82、TensorFlow教你如何构造卷积层
''' Created on 2017年4月22日 @author: weizhen ''' import tensorflow as tf #通过tf.get_variable的方式创建过滤器的权重 ...
- 这里ajax需要改成同步
var flag = true; var title = $("#modal").find("input[name=groupname]").val(); /* ...
- EF复合主键
[Key,Column(Order = )] [Key,Column(Order = )]
- Jackson读取列表
List<MyBean> result = mapper.readValue(src, TypeFactory.collectionType(ArrayList.class, MyBean ...
- spark性能调优02-JVM调优
1.降低cache操作的内存占比 1.1 为什么要降低cache操作的内存占比 spark的堆内存分别两部分,一部分用来给Rdd的缓存进行使用,另一部分供spark算子函数运行使用,存放函数中的对象 ...
- redis demo
方法hset(String key,String field,String value),hmset(String key, Map<String,String> hash),hgetAl ...
- MVC中的自定义标签分页控件,仅供大家学习!!
public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, ...
- 开启linux下面vsftp自身的服务
最近业务需求搞了一下sftp,配合samba感觉还是不错的. 上干货:笔者的环境是centos7.4 1.建立一个名为sftpusers的sftp用户组 groupadd sftpusers 2.建立 ...
- 使用IO流将数据库中数据生成一个文件,结果使用Notepad++打开部分数据结尾出现NUL
场景描述: 项目中通过java代码中从数据库中查询一系列数据,对数据做相应处理,然后通过字符流将数据写如一个新生成的文件中,将该项目部署在linux服务器上,最后生成的文件拿到本地使用notepad+ ...
- UICollectionView中的cell包含UIScrollview
需求:在scrollview的子View不为0,当scrollview的展示的index不为0且向右滑动CollectionView.CollectionView不滑动Cell,而是让scrollvi ...