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. ...
随机推荐
- 【转】adb.exe,start-server' failed -- run manually if necessary
[转]Android adb.exe程序启动不起来,如何处理 解决问题: 百度google大家多说的是任务管理器 kill掉adb 或者重启adb server,但我任务管理器就没有adb ,猜测是某 ...
- 通过配置Tomcat,让Android真机通过局域网访问PC的文件
在 Tomcat 根目录,找到conf\server.xml文件. 1.打开server.xml查找修改端口为8080端口: <Connector port="8080" p ...
- ExtJs007最常用的查询方法
Ext.onReady(function () { Ext.create('Ext.panel.Panel', { title: '我的面板', width: '100%', height: 400, ...
- java代理课程测试 spring AOP代理简单测试
jjava加强课程测试代码 反射. 代理 .泛型.beanUtils等 项目源码下载:http://download.csdn.net/detail/liangrui1988/6568169 热身运动 ...
- js限制图片的大小
<form id="financialForm" action="<%=basePath%>riskcontrol/website/review_bor ...
- 把复选框变成单选框(prop,attr的区别)
如果项目中需要统一样式的话,有可能会遇到把复选框变成单选框的需求. 下面是用jquery的简单实现 $(function(){ $("input[type='checkbox']" ...
- 什么是RAW?
RAWRAW是一个PHP网站开发系统,使用简单.快捷,核心功能是通过模版组合网站,模版可以自由开发,使开发者不再受传统开发的那种头晕限制,只需要通过填写表单即可完成网站的开发.此外,开发者还可以通过开 ...
- 转:alphaImageLoader滤镜加载后 链接不能点击
我是一个很少使用IE滤镜,也是一个不赞成使用IE滤镜的前端工程师.不过今天有一个朋友给我发来了一个有关于IE6的BUG,就是在IE6中使用了AlphaPNG透明的IE滤镜之后,a链接不能够点击.具体情 ...
- C++模板:二分图匹配
int Dfs(int k){ for(int i=0;i<v[k].size();i++){ int a=v[k][i]; if(used[a]==0){ used[a]=1; if(link ...
- [Leetcode]-containsNearbyDuplicate
//题目: //给定一个整数数组与一个整数k,当且存在两个不同的下标i和j满足nums[i] = nums[j]而且| i - j | <= k时返回true.否则返回false. #inclu ...