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中,玩家可 ...
随机推荐
- mysql 占用的内存大小
1.mysql执行查询计划,key_len表示索引使用的字节数,这个字节数和三个条件有关.mysql> create table t1(v1 char(10));Query OK, 0 rows ...
- otl插入数据不成功
原因是:void rlogon(...); 没有设置auto_commit为1,otl不会自动提交. 注意:static int otl_initialize (const int threaded_ ...
- ubuntu虚拟环境virtualenv中djanggo连接mysql
在ubuntu服务器上安装MYSQLDB,执行:sudo apt-get install python-mysqldb, 若提示: ---------------------------------- ...
- Ubuntu 12.04下PostgreSQL-9.1安装与配置详解(在线安装)
说明: 我是用root用户在终端登陆的,如果是非root用户,那在命令前需要加上"sudo",你懂的... 第一步:在Ubuntu下安装Postgresql ...
- Android activity之间传值关键性代码
从当前activity中获取et 表单中的值,并跳转到myactivity.java所绑定的xml布局文件上. private EditText et; Intent intent=new Inten ...
- aspx后缀映射成html
1.网站的配置文件添加如下代码: <configuration> <configSections> <section name="RewriterConfig& ...
- VirtualBox相关问题总结
欢迎关注我的社交账号: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://gith ...
- hdu----(1671)Phone List(Trie带标签)
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Farseer.Net
Farseer.Net V0.2 ORM开源框架 目录 http://www.cnblogs.com/steden/archive/2013/01/22/2871160.html V1.0教程:htt ...
- C#运算除法和求整
在C#与法中,“/”除后所得的值的类型,跟他的除数和被除数的类型有关.如: int a=4; int b=5 ...