Description

有一块地被划分成了n*m个区域,在一些区域里有垃圾要拾捡。
现在科研人员开发了一个能捡垃圾的机器人,机器人每一次都可以移动一个区域的距离。
假设机器人从最左上区域出发,他每次只能向右或者向下走。
每次他到达一个点,就会自动把这个点内的垃圾拾掉。
  问:该机器人最多能够拾多少垃圾?
  在最多情况下,有多少种方案?

Input

输入文件的第一行为两个整数n和m;
  接下来有一个n*m的01矩阵。
矩阵中的第i行j列的数字a[i][j]=0表示为空地。
a[i][j]=1表示为垃圾。

Output

输出两行,第一行为一个数字表示最多拾到的垃圾,第二行为一个数字表示在最多情况下,有多少种方案。

Sample Input

3 3
100
000
010

Sample Output

2
3

今天也是菜得水3级题的一天呢

因为机器人只能向下和向右走,满足无后效性。

所以我们考虑用DP作答。

首先,从输入上就有那么一个小小的坑就只有我觉得是坑吧,请大家研究一下矩阵的输入。

科科,是没有空格的。

所以我们要用string或者char数组来读入~

接着分析题意。

对于题目中的人工智障机器人,它到一个点的路径只有两
种:从上来或者从左来。

也就是说,对于题目中的点a[i][j],它只可能源于点a[i-1][j]与点a[i][j-1]。

这点理清了,下面就可以顺理成章地理解了。

一:求最多捡到的垃圾

我们可以用f[i][j]来统计捡到的最多垃圾数。由加法原理得出,f[i][j]=f[i-1][j]+f[i][j-1]

实现代码:

//DP求最多拾到的垃圾
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j];

这样下来,f[n][m]就是到达终点时捡到的最多垃圾数。即我们要的答案。

二:求在最多情况下,有多少种方案?

我们可以用q[i][j]来统计f最大时的方案数。

可得**有q[i][j]=q[i-1][j]C1+q[i][j-1]C2。

其中,若f[i-1][j]+a[i][j]==f[i][j],则C1=1,反之为0

若f[i][j-1]+a[i][j]==f[i][j],则C2=1,反之为0;

但是这样做还有一个问题:边界值的问题。

对于矩阵来说,最上和最右的点,是一定可以到达的。所以,我们可以把它们的初值赋为1。

这样一来,我们的计算式子不仅有了初始值,还没有了越界的漏洞。

实现代码:

//DP求路径数
for(int i=1;i<=n;i++)
{q[1][i]=1;q[i][1]=1;
}
//边界赋初值
for(int i=2;i<=n;i++)for(int j=2;j<=m;j++){long long C1,C2;if(f[i-1][j]+a[i][j]==f[i][j])C1=1;else C1=0;if(f[i][j-1]+a[i][j]==f[i][j])C2=1;else C2=0;q[i][j]+=q[i-1][j]*C1+q[i][j-1]*C2;}

似乎 一切都功德圆满了。

等等,你有看到窝的加粗嘛?

当初自信的可怜的continue就是这样WA的。。。。

一群乐于助蒻的大佬指导下,窝当时整个人就一懵的。

没错,本题最重要的部分不在前面。

其实,最重要的是

开 long long 。 。 。 。 。

惊不惊喜?

完整代码:

#include <iostream>
#include <string>#define maxn 105
using namespace std;string s[maxn];
long long a[maxn][maxn]; //a数组表示矩阵
long long f[maxn][maxn]; //f数组表示当前捡的最多垃圾数
long long q[maxn][maxn]; //g数组表示f最大时的方案数 int main()
{long long n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>s[i];for(int j=1;j<=m;j++)a[i][j]=s[i][j-1]-'0'; }//DP求最多拾到的垃圾 for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j];cout<<f[n][m]<<endl;//DP求路径数 for(int i=1;i<=n;i++){q[1][i]=1;q[i][1]=1;       }//边界赋初值 for(int i=2;i<=n;i++)for(int j=2;j<=m;j++){long long C1,C2;if(f[i-1][j]+a[i][j]==f[i][j])C1=1;else C1=0;if(f[i][j-1]+a[i][j]==f[i][j])C2=1;else C2=0;q[i][j]+=q[i-1][j]*C1+q[i][j-1]*C2;}cout<<q[n][m]<<endl;return 0;
}

QAQ求点赞

前往洛谷博客体验更佳:传送门

BSOJ1495 拾垃圾的机器人3451相关推荐

  1. 垃圾自动分拣系统python代码_Robot recycling 垃圾分拣机器人

    本集内容 Robot recycling 垃圾分拣机器人 学习要点 有关 "technology 科技" 的词汇 边看边答 What percentage of stationar ...

  2. 全球速度最快人工智能垃圾分拣机器人火爆环博会

    当你还在犹豫"这是什么垃圾",就在这转瞬即逝的一秒钟内,弓叶科技的人工智能垃圾分拣机器人PiCKiNG·Ai™已经在1600mm超宽行程范围内,完成了1.5次垃圾分类. 7天*2 ...

  3. 国外引进的技术?NO!这款最酷的垃圾分拣机器人是“三国产品”

    在第21届上海环博会现场,最吸引眼球的展位当属"弓叶科技"无疑,是什么使得观众纷纷蹲下身拿起手机拍摄视频,原来是人工智能垃圾分拣机器人PiCKiNG∙Ai™正从一大堆成分复杂的干垃 ...

  4. 智能回收机、垃圾分拣机器人 垃圾回收这是技术活儿

    北京,早晨,阳光驱散着阵阵寒意,穿上浅×××的工作服,小黄狗环保科技有限公司北京分公司工作人员赵玲,在鹿港嘉苑小区开始了新一天的忙碌.小区里刚安装一组智能垃圾分类回收机,居民们都很好奇,赵玲的工作就是 ...

  5. mbot机器人自动超声波模式程序_垃圾分类管家小程序 垃圾自动分类机器人,垃圾分类助手垃圾分类系统学习 AI自动垃圾分类识别...

    垃圾分类小程序可以极大方便大家在遇到垃圾分类难题的时候寻找解决办法.同时垃圾分类小程序还具有无需下载无需安装,打开即用的特点.非常适合做垃圾分类知识的普及. 最近各大城市都在施行垃圾分类制度,因此我们 ...

  6. 世界人工智能大会即将举办 AI机器人帮你分类垃圾

    应用场景是现阶段AI发展的重要决胜场,人工智能正逐渐走进我们的工作.生活. 去年12月,上海在全国率先发布"人工智能应用场景建设实施计划",目标到2020年,打造60个人工智能深度 ...

  7. 以大自然为师,可上天入地的11款仿生机器人

    来源:资本实验室 尽管人类已经借助科技的力量改造了世界,但许多技能仍然为人类所不拥有,很多恶劣的环境仍然是人类的禁区.而经过大自然的"公平选择",使得某些生物具有我们所不具备的独特 ...

  8. 工业机器人电柜布线_协作并联,重新注解并联机器人

    加入高工机器人专业行业群(高工机器人CEO圈,高工机器人产业4群,移动机器人产业链群),加微信:13590381326,出示名片,仅限机器人及智能制造产业链上的核心零部件供应商.本体厂家.系统集成商. ...

  9. 机器人瓦力 配乐_《WALL-E》机器人小王子

    前几天看了迪斯尼的动画片<WALL-E>,很感人,并且发现了一个机器人版的小王子. 清垃圾的机器人Wall-E孤单的在废墟地球默默的日复一日辛勤工作,像个上班族每天准时上下班,干活的时候还 ...

最新文章

  1. android程序设计期末试题b,《Android程序设计》期末试题B.doc
  2. SQL Sever 子查询与嵌套查询
  3. Servlet3.0 || IDEA与tomcat的相关配置
  4. 【NLP】全面详解 | 深度学习中的注意力机制(一)
  5. Mathematics 9.0 绘制不等式确定的区域
  6. Linux 网络编程八(epoll应用--大并发处理)
  7. odoo10 继承(扩展)、模块数据
  8. linux实现自动互信,Linux 使用shell脚本实现自动SSH互信功能
  9. 一支python教学_第一只python爬虫
  10. MS CRM如果在Tab页中有Iframe选项,原来速度不慢,突然速度变慢
  11. 火狐 firefox proxy moz=proxy:// 407错误 解决办法
  12. HTML5 FormData实现文件上传实例
  13. C语言动态链表数据结构实现的学生信息项目
  14. 中国推动全球4G标准制定
  15. 华硕计算机电源已连接未充电,笔记本电池显示“电源已接通,未充电”
  16. 真香!微软办公环境大揭秘!
  17. 课本剧剧本和计算机专业相关,《滥竽充数》课本剧剧本
  18. python sdk是什么意思_什么是 SDK?
  19. C#数据结构:两栈实现队列,两队列实现栈
  20. 欧姆龙气压传感器 2SMPB-02E程序编写

热门文章

  1. Excel不用分列函数将单元格中顿号隔开的数求和
  2. android pppd log,未记录的pppd退出代码
  3. MySQL基本增删改查以及搭配node在项目中的操作
  4. 基于lucene的案例开发:纵横小说章节列表采集
  5. spyder pyecharts不显示_后期剪辑还在升级主机配置?换台京东方显示器才最重要...
  6. I/Q数据频谱分析仪简介
  7. HDU - 6609
  8. 将Jetson XavierNX的Ubuntu系统迁移至到nvme固态硬盘上
  9. java lambda表达式 steam api
  10. 跑步用挂脖耳机好还是无线耳机、公认最好的跑步耳机推荐