【算法设计与分析基础】20、动态规划-硬币搜集问题

博客探讨了如何使用动态规划解决一个机器人在n*m格木板上搜集硬币的问题。机器人每次只能向右或向下移动,目标是搜集最多的硬币。解题思路是从结果状态出发,通过f[i,j]=max{f[i, j - 1], f[i - 1, j]}的状态转移方程,初始化边界条件,并遍历得到最大硬币数。" 113656195,10325653,Python列表操作:过滤、修改和替换技巧,"['Python编程', '数据处理', '列表操作']
摘要由CSDN通过智能技术生成

题目:

在n*m格木板中放有一些硬币,每格的硬币数目最多为一个。在木板左上方的一个机器人需要搜集
尽可能多的硬币并把他们带到右下方的单元格,每一步,机器人可以从当前的位置向右移动一格
 或者向下移动一格,当机器人遇到一个有硬币的单元格的时,就会将这枚硬币搜集起来

 

 

 

解题:

硬币收集的时候,我们 从结果状态开始看,当搜集当前硬币的时候,只有两种方式,从上往下搜集,或者从左向右搜集
也就是当前f[i,j] = max{f[i, j - 1], f[i - 1, j]},初始化第一行和第一列,从第二行和列开始遍历
就可以动态规划所有的中间状态,最后获取最后的位置的地方的和,即便是搜集到的最大的和,并且过程的路径可以根据动态规划中间数组输出

 

 

package cn.xf.algorithm.ch08DynamicProgramming;

import java.util.ArrayDeque;
import java.util.Deque;

import org.junit.Test;

import cn.xf.algorithm.ch08DynamicProgramming.vo.CompareIndexVo;
import cn.xf.algorithm.ch08DynamicProgramming.vo.ResultVo;

/**
 * 硬币搜集问题
 * 
 * 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个。在木板左上方的一个机器人需要搜集
 * 尽可能多的硬币
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值