题目描述

在一个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礼物的最大价值的更多相关文章

  1. 力扣 - 剑指 Offer 47. 礼物的最大价值

    题目 剑指 Offer 47. 礼物的最大价值 思路1 因为是要求最大价值,而且只能移动下方或者右方,因此,每个位置的最大值就是本身的值加上上边 / 左边 中的最大值,然后每次遍历都可以复用上一次的值 ...

  2. 【Java】 剑指offer(47) 礼物的最大价值

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值( ...

  3. 每日一题 - 剑指 Offer 47. 礼物的最大价值

    题目信息 时间: 2019-07-02 题目链接:Leetcode tag:动态规划 难易程度:中等 题目描述: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0). ...

  4. 剑指 Offer 47. 礼物的最大价值

    题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘及 ...

  5. 剑指 Offer 49. 丑数 + 小根堆 + 动态规划

    剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...

  6. 力扣 - 剑指 Offer 49. 丑数

    题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小 ...

  7. 【Java】 剑指offer(49) 丑数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 我们把只包含因子2.3和5的数称作丑数(Ugly Number). ...

  8. [剑指Offer]47-礼物的最大价值(DP)

    题目描述 在一个m*n的棋盘每个格有一个礼物,每个礼物有一定价值(>0).从棋盘左上角到右下角,只能向下或向右走,问能拿到的礼物最大价值. 解题思路 dp. 可将二维数组版优化为一维数组版. 代 ...

  9. 每日一题 - 剑指 Offer 49. 丑数

    题目信息 时间: 2019-07-03 题目链接:Leetcode tag:动态规划 小根堆 难易程度:中等 题目描述: 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求 ...

随机推荐

  1. ios 最全的常用字符串操作

    1.将NSData / NSString转化 1 2 3 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; // 将字符串 ...

  2. 94、tensorflow实现语音识别0,1,2,3,4,5,6,7,8,9

    ''' Created on 2017年7月23日 @author: weizhen ''' #导入库 from __future__ import division,print_function,a ...

  3. Linux随笔 - DNS搭建

    域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网.DNS 使用TCP和UDP端口53 ...

  4. Python 文件及文件夹处理

    import os,shutil def getfilelist(filepath): filelist = os.listdir(filepath) # 获取filepath文件夹下的所有的文件 # ...

  5. docker stack利用secrets启动wordpress

    docker-compose文件 version: '3.1' services: web: image: wordpress ports: - : secrets: - my-pw environm ...

  6. 几道JS代码手写面试题

    几道JS代码手写面试题   (1) 高阶段函数实现AOP(面向切面编程)    Function.prototype.before = function (beforefn) {        let ...

  7. java并发锁ReentrantReadWriteLock读写锁源码分析

    1.ReentrantReadWriterLock 基础 所谓读写锁,是对访问资源共享锁和排斥锁,一般的重入性语义为如果对资源加了写锁,其他线程无法再获得写锁与读锁,但是持有写锁的线程,可以对资源加读 ...

  8. webservice的使用-axis1-02

    1.webservice传递javabean 自定义javabean必须是可序列化的 如果javabean中有内部类必须是静态的,因为只有静态的类才可以序列化 如果javabean中用到了其他的jav ...

  9. 下载文件时HttpServletResponse设置响应头的Content-Disposition属性

    Content-Disposition属性有两种类型 inline :将文件内容直接显示在页面 attachment:弹出对话框让用户下载 弹出对话框下载文件 resp.setHeader(" ...

  10. android中的国际化

    java国际化步骤: 定义资源文件: baseName_language_country.properties baseName_language.properties baseName.proper ...