swust oj 1132: Coin-collecting by robot 题解

本文介绍了SWUST OJ 1132题目的解题思路和C++实现。通过使用二维数组存储硬币状态,利用递推公式计算每个位置的最大硬币数,最后找出最大值作为答案。代码部分展示了具体实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.题目

 二.解题思路

第一步:用两个二维数组分别存储初始硬币情况和机器人每走一步对应手中硬币的情况.

a[i][j] 表示输入的硬币情况

b[i][j] 表示机器人每走一步对应位置上,收集的硬币数

第二步:每个位置上的硬币数计算方法有两种:

一是上方的硬币数+自身

二是左方的硬币数+自身

(黑线代表向右方,红线代表向下方)

因此可以得到递推公式:b[i][j] = max( a[i-1][j] , a[i][j-1] ) + a[i][j]

此处注意:

我采用特殊处理,将数组的下标统一从a[1][1],b[1][1]开始存储.a[0][0]和b[0][0]都初始化为0,因此,如果下标选择从1开始,就可以免去讨论特殊情况(b[i][j]第一行的结果只能不断向右递加,第一列的结果也只能不断向下递加)从而只需要套用递归公式.

第三步:得到数组b[i][j]之后,找到其中最大的数,即为所求.

以所给样例举例,如下图所示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值