MM 不哭 (tyvj 1097)
题目大意:
一条数轴上有 n 个 MM 在哭,需要tcboy去安慰,tcboy 一开始站在第k个MM身边,每个MM 哭都会减掉tcboy的RP。
确定安慰MM的顺序使得RP扣得最少。求 min(Rp_cost); (安慰不要时间。。。)
其实就是经典的关灯问题: 一条数轴上有很多灯,需要全部关掉,每盏灯的每分钟的耗电量不一样,确定关灯顺序 使得耗电最少。(关灯不要时间。)
解题过程:
1.首先想到 如果人经过了一盏灯,那么必定把它关掉,否则答案不会更优。
2.其次想到 关掉一个区间的最后一盏灯后 人的位置 必定是 在在各个区间的最左端或者最右端。因为如果是站在中间的位置x,那么区间的两头肯定也走过了,既然两头都走过了,再走两头之前 x必定也走过了,根据1,这样肯定不会最优。
3.定义F[i][j][0] 为关掉区间[i,j]的所有灯,且人站在 i 的时候 的最小花费。F[i][j][1] 为关掉区间[i,j]的所有灯,且人站在 j的时候 的最小花费。 time为相应所需要的时间;
先看F[i][j][0] (F[i][j][1]的方法类似 ),必定是由 F[i+1][j][0] 或者F[i+1][j][1]转移过来。
那么F[i][j][0]=
min{F[i+1][j][0]+cost[i]*(time[i+1][j][0]+dist[i][i+1]) , F[i+1][j][1]+cost[i]*(time[i+1][j][1]+dist[i][j])};
但是如何 求出 time数组呢? 用类似F的方法转移? 一开始这样写 只过了 4个点,想了好久才明白 这里陷入了一个误区,
如果time用类似F的方法转移,那么time[i][j][0] 得到的 其实 是 关掉区间[i,j]的所有灯,且人站在 i 的时候 的最短时间,是和F[i][j][0] 不对应的, 因为时间最短不代表 cost 最小。然后我就换了一种方法。
4. 现在想想 这种方法修改一下其实应该也可以做(我还没写过):time[i][j][0]应该由F[i][j][0]决定,如果F[i][j][0]是从F[i+1][j][0]转移过来的,那么time[i][j][0]也从time[i+1][j][0]转移过来,否则从time[i+1][j][1]转移过来。
5.网络上的标准解法(我后来改成这样了):
定义F[i][j][0] 为关掉区间[i,j]的所有灯,且人站在 i 的时候,[1,n]的灯最少已经花费了多少。
之前的做法 在求区间[i,j]的时候 是不考虑[1,i-1]和 [i+1,n]的灯的花费的,现在要算。
sum[i,j]表示 区间[i,j]的灯的单位花费和。实现的时候可以用前缀和优化。
那么方程就变成:
F[i][j][0]=
min{F[i+1][j][0]+dist[i][i+1]*(sum[1,i]+sum[j+1,n]) , F[i+1][j][1]+dist[i][j]*(sum[1,i]+sum[j+1,n]) };
F[i][j][1]同理;
ans=min{F[1][n][0],F[1][n][1]};
MM 不哭 (tyvj 1097)的更多相关文章
- tyvj1097 mm不哭
背景 Bless all rp++.. 描述 在一个数轴上,有n个MM(绝非恐龙!)在哭泣(5555~一直哭). tcboy也在这个数轴上,并恰好看到了这一幕,由于每个MM哭都会让tcboy损失一定的 ...
- 集训DP复习整理
DP复习 集训%你赛2:测绘(审题DP) 经过2000+个小时的努力终于把这道题做出来的蒟蒻通 分析: 这道题我一直没做出来的原因就是因为我太蒟了题面看不懂,题面读懂了,其实不是特别难. 题目翻译: ...
- TYVJ博弈论
一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140 飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...
- 【BZOJ】1097: [POI2007]旅游景点atr(spfa+状压dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1097 首先还是我很sb....想到了分层图想不到怎么串起来,,,以为用拓扑序搞转移,,后来感到不行. ...
- [设计模式]解释器(Interpreter)之大胆向MM示爱吧
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 “我刚写了个小程序,需要你来参与下.”我把MM叫到我的电脑旁,“来把下面这条命令打进去,这是个练习打(Pian)符(ni)号(de)的 ...
- tyvj 1342 教主泡嫦娥 环上DP
342 教主泡嫦娥 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 2012年12月21日下午3点14分35秒,全世界各国的总统以及领导人都已经汇聚在中国的方 ...
- BZOJ 1097: [POI2007]旅游景点atr( 最短路 + 状压dp )
先最短路预处理, 然后状压就行了 -------------------------------------------------------------------------- #include ...
- tyvj P1403 关押罪犯 题解
P1403 [NOIP2010]关押罪犯 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他 ...
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...
随机推荐
- 百度web前端面试2015.10.18
邮件里通知的周日下午两点参加百度校招面试,我13:10分就到了,前台先让我拿了个面试资格单(上面是我的信息),然后在web前端面试入口排队,面试在百度食堂举行的,等了大概1个小时,放我去面试.都是一对 ...
- 14 Using Indexes and Clusters
do not build indexes unless necessary. 索引是非常占资源的To maintain optimal performance, drop indexes that a ...
- RedHat 7配置yum源
卸载自带的yum软件包 rpm -e yum-utils--.el7.noarch --nodeps rpm -e yum-rhn-plugin--.el7.noarch --nodeps rpm - ...
- 动态替换fragment
// [1]获取手机的宽和高 windommanager WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); in ...
- jquery实现全选、反选、不选
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8&quo ...
- go中间的&和*
package main import "fmt" func main() { var a int = 1 var b *int = &a var c **int = &a ...
- html frames
http://blog.sina.com.cn/s/blog_67697189010116o0.html *********************************************** ...
- 批处理+VBS+注册表实现开机自动启动EXE程序
批处理+VBS+注册表实现WINDOWS开机自动启动EXE程序 以下都是基于WINDOWS系统. 我们都知道当我们有想某个程序在开机时自动运行,只能有三个方式: 1.做成服务,然后对服务进行配置为自动 ...
- scala调用java的方法,返回了一个对象链表List<Student>,在scala中遍历该链表获取指定Student的名字name
假设Student类如下: class Student { private int no; private String name; public int getNo() { return no; } ...
- grep使用方法
linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...