棋盘上礼物价值最大化问题

剑指offer(47):礼物的最大值(动态规划详解,python版) 本博客主要内容为图书《剑指offer》第二版47 题的解题思路及代码。方法可能还有不足之处,欢迎大家讨论评论。python版动态规划求解 阅读详情

题目:
6*6的棋盘上面放着36个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于100小于1000),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下角,请设计一个算法使其能够获得最大价值的礼物。

解题:
这是一个经典的动态规划问题。
首先是动态规划遵守的4个步骤:
1 描述最优解的结构
2 递归定义最优解的值
3 按自底向上的方式计算最优解的值
4 由计算出的结果构造一个最优解
(本段来自《算法导论》第192页)
根据上面的理论结合本题我们可以得出如下的步骤:
1 最优解的结构:要当前格的价值最大化,则需要判断当前格的上面一格加上当前格的礼物价值和左边一格的加上当前格的礼物价值,取最大的即可。
2 递归定义:f(i,j)=max(f(i-1,j),f(i,j-1))+a[i][j]。如果是第一行则:f(0,j)=f(0,j-1)+a[0][j]。如果是第一列则:f(i,0)=f(i-1,0)+a[i][0]。
3 自底向上求解:即从第一行第一列开始循环求解即可。
4 根据循环的结果构造最优解。

#include <iostream>
using namespace std;
inline int max(int a,int b){
    return (a>b)?a:b;
}
int maxValue(int a[6][6]){
    int f[6][6]={0};
    for(int i=0;i<6;i++){
        for(int j=0;j<6;j++){
            if(i==0&&j==0)
                f[i][j]=a[0][0];
            else if(i==0)
                f[i][j]=f[i][j-1]+a[i][j];
            else if(j==0)
                f[i][j]=f[i-1][j]+a[i][j];
            else
                f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j];
            cout<<f[i][j]<<" ";
        }
        cout<<endl;
    }
    return f[5][5];
}
int main() {
    int a[6][6]={
        {1,3,6,2,4,5},
        {3,5,6,8,2,3},
        {3,5,7,2,4,5},
        {5,3,6,7,8,3},
        {3,6,2,9,5,2},
        {3,5,7,3,6,6}
    };
    int m=maxValue(a);
    cout<<"m="<<m<<endl;
    return 0;
}

源博客:https://blog.youkuaiyun.com/itbuluoge/article/details/20641417

ANSYS 12.1避坑全记录:当Win7+VMware14遇到FLEXlm报错时的自救指南 本文详细介绍了在Windows 7和VMware14环境下安装和运行ANSYS 12.1时遇到的FLEXlm报错问题及其解决方案。通过虚拟机技术隔离时间同步问题,提供从环境配置到许可证管理的完整指南,帮助用户稳定运行这一老旧版本的工程仿真软件。 阅读详情

相关推荐

爬虫小例--爬药监局(上)

”明月如霜,好风如水,清景无限 “ 文远最近也算是爬虫入门吧,相信后面会慢慢熟悉。 壹 直接上例子,爬取药监局的数据。目的是得到每家公司的详情数据,例: 具体网址:http://scxk.nmpa.gov.cn:81/xk/ 这是主页,下面详情信息: 贰 分析,通过网页检查发现,主网页上没有公司相关数据,观察XHR中的Ajax请求发现,公司信息都是动态数据(方便更新),点击发现每个公司 的详情信息通过ID号这个参数区别,那么可以确定思路是先得到每个公司的ID号,然后在通过ID对应每一个详细网站,同样右键

john_ashley的博客 4556

算法设计——棋盘问题(分治)

问题 分析 当棋盘大小为1时,结束 当大小为2时,可找到L骨牌覆盖 当大小大于2时,我们可将棋盘分解为四个相同大小的棋盘的覆盖问题,当某个棋盘不存在特殊方格时,我们则设置特殊方格如(b) 再深入处理小棋盘 我们求解时,首先是设置特殊方格的覆盖,所以设置的特殊方格在某一块棋盘中处于最先覆盖,即数字最小 代码实现 #include<stdio.h> #include<string...

Doro_的博客 1954

Linux下安装FastDFS及生成缩略图

1. 安装编译环境 yum install git gcc gcc-c++ make automake vim wget libevent -y 2. 安装libfastcommon基础库 mkdir /root/fastdfs cd /root/fastdfs git clone https://github.com/happyfish100/libfastcommon.git --depth 1 cd libfastcommon/ ./make.sh && ./make.sh ins

weixin_45234710的博客 1374

动态规划学习--2.礼物最大价值C语言实现

【代码】动态规划学习--2.礼物最大价值。

weixin_44103364的博客 572

随机森林模型及案例(Python)

1 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。 集成学习模型的常见算法有Bagging算法和Boosting算法两种。 Bagging算法的典型机器学习模型为随机森林模型,而Boosting算法的典型机器学习模型则为AdaBoost、GBDT、XGBoost和LightGBM模型。 1.1 Bagging算法简介 Bagging算法的原理类似投票,每个弱学习器都有一票,最终根据所有弱学习器的投

qq_42433311的博客 4万+

CentOS 7下kkFileView 4.4.0离线部署全攻略(含LibreOffice 7.5配置避坑指南)

本文详细介绍了在CentOS 7环境下离线部署kkFileView 4.4.0的全流程,包括LibreOffice 7.5的配置避坑指南、中文字体解决方案以及企业级运维实践。通过本指南,用户可以在内网环境中快速搭建稳定可靠的文档在线预览服务,提升办公效率。

weixin_28481133的博客 290

礼物的最大值

比如说现在有一个如下的棋盘, 1 10 3 8 12 2 9 6 5 7 4 11 3 7 16 5 在这个棋盘中,按照(1,12,5,7,7,16,5)的顺序可以拿到总价值最大的礼物。礼物的最大价值为1+12+5+7+7+16+5=53。 递归 动态规划 递归 def sum(a, row, col): if row==0 and col==0: re...

北歌的博客 502

微信小程序转发功能异常报错 由于小程序违规分享功能暂时无法使用的解决办法

小程序右上角转发功能被封,不代表你违规了,而可能是你没认证、没备案!很多功能都是“先合规、后开发”,踩坑就晚了,别像我一样绕了三圈才发现问题。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2611

面试题47-礼物的最大价值

题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 解题思路 这是一个典型的能用动态规划解决的问题。我们先用递归的思路来分析。我们先定义第一个函数f(i,j)表示到达坐标为(i,j)的格子时能拿到的礼物总和的最大值。根据题目要求,我们有两种途径到达坐标为(i,j)的格子:通过格子(i-1,j)或者(i,j-1

weixin_42127177的博客 1103

RK AVS双目融合记录

NOTE] 调试平台双目avs融合调试,需要先保证两个摄像头能正常出图同时出流。使用默认工具测试vi->avs->venc通路是否正常,-a可指定isp效果文件需要开启CONFIG_VIDEO_ROCKCHIP_AVSP和CONFIG_VIDEO_ROCKCHIP_FEC,dts中使能。

mangofu的博客 104

新版CKA2020-2020-10-13-真题试卷

2020年10月13日 真题 新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole that only allows the creation of the following resource types: Depl

随笔记录-分享&记忆 2394

棋盘上礼物价值最大化问题-微策略2011校园招聘笔试题

棋盘上礼物价值最大化问题-微策略2011校园招聘笔试题,题目:8*8的棋盘上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下角,请设计一个算法使其能够获得最大价值的礼物。

jianghuihong2012的专栏 1927

WordPress插件depicter存在SQL注入漏洞(CVE-2025-2011)

Depicter 是一款功能强大的 WordPress 幻灯片插件,允许用户通过直观的拖放编辑器轻松创建响应式滑块、轮播和动态内容展示。该插件提供丰富的模板库、动画效果和图层控制,支持多媒体内容嵌入(如图片、视频、HTML),并优化了移动端显示和SEO性能。其无代码操作界面适合非技术用户,同时提供高级自定义选项,适用于产品展示、营销推广和视觉叙事等多种场景,是提升网站视觉吸引力的高效工具。

m0_50125527的博客 552

礼物的最大价值

题目描述 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。 给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? leetcode类似题目: 62. 不同路径 63. 不同路径 II 思考:如果要是拿到最大价值的路径和最大价值,是不是就只能用回溯法了? ...

慢慢冲鸭子的博客 166

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

礼物的最大价值--剑指offer(JAVA)

题目: 在一个 m*n 的棋盘中的每一个格都放一个礼物,每个礼物都有一定的价值(价值大于0).你可以从棋盘的左上角开始拿各种里的礼物,并每次向右或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及上面个的礼物,请计算你最多能拿走多少价值的礼物? 思路: 我们利用递归的思路来分析。定义函数f(i,j)表示到达坐标为(i,j)的格子时能拿到的礼物总和的最大值。根据题目要求,我们要么从(i-1,j),要么从(i,j-1)到达(i,j)。因此f(i,j) = max( f( i-1 , j ) , f( i ,

zmingyang的博客 297

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

算法练习--礼物的最大价值

题目: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可...

QilanAllen的博客 823

这周的日常

算法

m0_63685436的博客 141

剑指 Offer 47. 礼物的最大价值 - leetcode 剑指offer系列

题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ 另外在公众号里回复 offer 就能看到剑指 offer 系列当前连载的所有文章了 题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 0 <.

随便发挥的博客 404

AcWing 60 礼物的最大价值

题目描述: 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。 给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 注意: m,n&gt;0 样例: 输入: [ [2,3,1], [1,7,1], [4,6,1] ] 输出:19 解释:沿...

昂昂累世士的博客 218

力扣LeetCode经典算法 礼物的最大价值

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

胡乱写点什么 574

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

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 提示: 0 < grid.length <= 200 ...

ujn20161222的博客 88

剑指offer 48. 礼物的最大价值

在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。 给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 注意: m,n&gt;0 样例: 输入: [ [2,3,1], [1,7,1], [4,6,1] ] 输出:19 解释:沿着路径 2→3→7→6→1...

zhaohaibo的博客 234

47_剑指offer_java_礼物的最大价值

目录 题目描述 测试用例 题目考点 解题思路 参考解题 题目描述 在一个 m*n 的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(价值大于0)。从左上角开始拿礼物,每次向右或向下移动一格,直到到达棋盘的右下角。给定一个棋盘及上面的礼物,请计算你最多能拿到多少价值的礼物。 例如,在下面的棋盘中,如果沿着(1、12、5、7、7、16、5)的路线,那么我们能拿到最大价值为53的礼物...

Longtermevolution的博客 238

【动态规划】47题-礼物的最大价值

1 题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 提示: 0 < grid.length <= 200 0 < gri

... 543

ACWING60. 礼物的最大价值(剑指offer)

在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。 给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 注意: m,n>0 样例: 输入: [ [2,3,1], [1,7,1], [4,6,1] ] 输出:19 解释:沿着路径 2→3→7→6→1 可以得到拿到最...

tomjobs的博客 359
上一篇: 青蛙跳台阶问题
下一篇: 位运算计算二进制中的1的个数
ListentTome
博客等级 码龄9年 3粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值