uva 10599 - Robots(II) (dp | 记忆化搜索)
本文出自 http://blog.csdn.net/shuangde800
---------------------------------------------------------------------------------
题意
给一个n*m大小的网格,有一些格子上面会有一个垃圾。机器人从左上角(1,1)出发,每次只能选择向右,或者向下走一步,
终点是(n, m)。问最多可以捡多少个垃圾? 且捡最多垃圾有几种路径方案?注意路径方案指和有垃圾的格子有关。
思路
一开始没注意到方案只和有垃圾的格子有关,当作水题做,结果输出的方案数比样例大了非常多。然后又想了下。
根据题意,路径只和有垃圾的格子有关,那么我们可以把这个网格抽象成一个图,图的节点就是有垃圾的格子,然后加上
一些边把这些格子连起来。那么关键就是怎样加这些边?
我们知道,对于点(i, j),只能选择走到(x, y) x>=i, y>=j,如果把所有有垃圾的点(x,y)都和(i,j)用边连起来,那么估计就要TLE了。
对于点(i,j)首先,它可以直着往下走,那么往下碰到的第一个有垃圾的点,就可以和当前点连成一边,然后后面的忽略。
然后还可以往右边走,和往右下角走,那么就从从当前行一直往下行枚举,对于每一行,从j+1列开始取第一个有垃圾的点,可以加一条边,然后这行后面的就忽略。
注意,上面所谓的“加边”,只是一种思考方式,实际写代码时不需要真的去建图。
f(i, j) 表示从点(i,j)出发最多可以捡到多少个垃圾。
cnt(i, j) 表示从点(i, j)出发,捡最多垃圾有多少种方案。
那么,
f(i, j) = max{ f(x, y) + 1 | 点(x,y)是和(i,j)有边的相连的点} (“有边”的定义看上面分析)
cnt(i, j) = sum( cnt(x, y) | 点(x, y)是和(i,j)相连的点 && f(x,y) = f(x,y)+1)
输出路径很简单,记录一下转移过程即可。
需要注意的是,点(1,1)和(n,m)可能会没有垃圾,这时我们就手动给他们增加一个垃圾,输出时不要输出这点就可以了
代码
uva 10599 - Robots(II) (dp | 记忆化搜索)的更多相关文章
- UVa 10599【lis dp,记忆化搜索】
UVa 10599 题意: 给出r*c的网格,其中有些格子里面有垃圾,机器人从左上角移动到右下角,只能向右或向下移动.问机器人能清扫最多多少个含有垃圾的格子,有多少中方案,输出其中一种方案的格子编号. ...
- UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
题意: 有n个长为m的各不相同的二进制数(允许存在前导0),别人已经事先想好n个数中的一个数W,你要猜出这个数. 每次只可以询问该数的第K为是否为1. 问采用最优询问策略,则最少需要询问多少次能保证猜 ...
- UVa 10817 (状压DP + 记忆化搜索) Headmaster's Headache
题意: 一共有s(s ≤ 8)门课程,有m个在职教师,n个求职教师. 每个教师有各自的工资要求,还有他能教授的课程,可以是一门或者多门. 要求在职教师不能辞退,问如何录用应聘者,才能使得每门课只少有两 ...
- uva 10123 - No Tipping dp 记忆化搜索
这题的题意是 在双脚天平上有N块东西,依次从上面取走一些,最后使得这个天平保持平衡! 解题: 逆着来依次放入,如果可行那就可以,记得得有木板自身的重量. /********************** ...
- 状压DP+记忆化搜索 UVA 1252 Twenty Questions
题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...
- 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索
题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
- [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树
树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...
- poj1664 dp记忆化搜索
http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...
- ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. Poor Ramzi -dp+记忆化搜索
ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. ...
随机推荐
- ASP.NET关于Eval的值
ASP.NET邦定数据“<%#Eval("Sex")%>”运用三元运算符: <%#(Eval(") ? "男" : "女& ...
- Lucene站内搜索的设计思路
正好近期部门有一个小需求需要做商品的搜索,虽然最终由于工作量等原因先做数据库搜索,我依然用刚接触的Lucene弄了一套自嗨. 首先看需求:搜索:根据商品标题和内容搜索 没错,就这么简单! 我想了想,数 ...
- 手动添加删除windows服务
1.使用sc命令创建服务 命令格式如: sc create [service name] [binPath= ] <option1> <option2>... 比如: sc c ...
- iphone抓取移动网络报文的方法
iphone抓取移动网络报文的方法 对iPhone进行越狱,网上有很多教程,这里不做说明.越狱后会有cydia这个app,首先对用户身份进行设置,选用开发者身份.打开这个应用,搜索openssh,找到 ...
- setTimeout 虚假的“异步”
看这篇http://www.laruence.com/2009/09/23/1089.html 所以实际上 setTimeout更像是任务按照队列执行 经过setTimeout设置后任务放在了队尾 ...
- ASP.NET MVC进阶之路:依赖注入(Di)和Ninject
0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点.在程序运行过程中,客户 ...
- Move WriteBuffer ReadBuffer String
在实际编程中,经常会用到Buffer,当string作为Buffer传值时需要注意的是 1, string的值的起始索引是1,千万记住! 2, 有时候需要先告诉系统去开辟出内存空间,用SetLengt ...
- 九款让WordPress成为赚钱利器的广告插件
Blog有了很不错的流量后,看到别人博客挂的广告挣$,是否也有挂广告的冲动,但是,修改wordpress模版去让人不厌其烦,布局.样式都的重新修改一下,为了不那么麻烦,笔者整理的几款wordpress ...
- 变脸不变质的桥梁模式(Bridge Pattern)
有一哥们是搞山寨货的,什么流行就搞什么.自己有个厂子,前些时间服装挣钱,就生产衣服,如今搞手机挣钱,搞手机,这哥们非常聪明,就换了个产品,工人,厂房都不变.他是怎么做到的?用类图来模拟一下: 由类图能 ...
- T-SQL函数及用法--转
转自http://www.cnblogs.com/qixuejia/archive/2010/07/14/1777105.html 1. 聚合函数 (1) AVG 函数功能返回组中值的平均值.空值将被 ...