当前位置: 首页 > news >正文

找银子 题解(c++)

题目 

 

思路

首先,这道题乍一看,应该可以用搜索来做。

但是,搜索会不会超时间限制呢?

为了防止时间超限,我们可以换一种做法。

先创立两个二维数组,一个是输入的数组a,一个是数组b。

假设 i 行 j 列的数是 a [ i ] [ j ],和b [ i ] [ j ]

输入的时候判断:如果 a [ i ] [ j ]<300,那么 a [ i ] [ j ] = a [ i ] [ j ] /2。

然后,b [ i ] [ j ] = a [ i ] [ j ].

如果学过小学奥数:标数法

那么,你会很好理解:

一排一排、从左到右的去处理:

走到 a [ i ] [ j ] 这处银子时,得到的银子总量为 a [ i ] [ j ] + max( b [ i - 1 ] [ j ] , b [ i ] [ j - 1 ]).将这个数存在 b [ i ] [ j ]中。

最后,只要输出 b [ n ] [ m ] 就好了

相信标数法你们都学过,因为它很简单,所以这里就不多解释这样写的原因了。

AC代码:

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[110][110];
int b[110][110];
int main()
{cin>>n>>m;for(int i = 1;i<=n;i++){for(int j = 1;j<=m;j++){cin>>a[i][j];if(a[i][j]<300) a[i][j] /= 2;b[i][j] = a[i][j];}}for(int i = 1;i<=n;i++){for(int j = 1;j<=m;j++){b[i][j] += max(b[i-1][j],b[i][j-1]);}}cout<<b[n][m];return 0;
}

相关文章:

  • C++ 核心基础:数字、数组、字符串、指针与引用详解
  • springboot3+vue3融合项目实战-大事件文章管理系统-更新用户密码
  • TypeScript 装饰器详解
  • Kotlin Multiplatform--03:项目实战
  • 六大设计原则
  • 2025低空经济发展趋势
  • css背景相关
  • PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)
  • spark算子介绍
  • 单片机-STM32部分:12、I2C
  • Redis设计与实现——数据结构与对象
  • python实战项目69:基于Python爬虫的链家二手房数据采集方法研究
  • 宝塔centos7.6安装redis失败
  • DeepSeek:开启能源领域智能化变革新时代
  • Linux `uname` 指令终极指南
  • SpEL(Spring Expression Language)使用详解
  • CSS Layer 详解
  • Linux : 多线程【线程概念】
  • 复现MAET的环境问题(自用)
  • linux基础操作4------(权限管理)
  • 风雨天涯梦——《袁保龄公牍》发微
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 京东CEO许冉:外卖日单量接近2000万单,看到外卖对平台拉动和转化效应
  • 俄副外长:俄美两国将举行双边谈判
  • 广东省人大教科文卫委原主任委员梁万里被开除党籍:退休后受贿仍不知止
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵