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中,玩家可 ...
随机推荐
- hdu3124Arbiter(最小圆距离-扫描线)
链接 详解http://blog.sina.com.cn/s/blog_6e7b12310100qnex.html #include <iostream> #include<cstd ...
- jquery input选择弹框
index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- Javascript设计模式之创建对象的灵活性
传统的 /* Anim class */ var Anim = function () {}; Anim.prototype.start = function () { console.log(&qu ...
- 对List里的对象元素进行排序
public class Student { private int studentId; private String studentName; private int age; public St ...
- hiho_1086_browser_caching
题目 浏览器有一个cache,可以存放M(M <= 5000) 个url地址(url为长度小于30的字符串).现在进行N(N <= 20000)次访问,每一个访问,如果访问的url在cac ...
- VB6 GDI+ 入门教程[8] Bitmap魔法(1):创建
http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[8] Bitmap魔法(1):创建 2009 年 9 月 ...
- Laravel 实现定时任务
运行命令schedule run 时laravel会去App\console\kernel.php文件中查找schedule方法,有没有要执行的定时命令 实现流程:首先可以自定义命令并注册命令(参考上 ...
- 用java实现冒泡排序法
一.基本思路: 冒泡排序是一种简单的交换类排序.其基本思路是,从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移.每经过一趟排序后,关键字值最大的元素将移到末尾,此时 ...
- 在VBA中调用工作表函数
虽然VBA几乎可以完成所有工作表函数的功能,但是有时候在无法打开思路的时候,适当调用一些工作表函数也未尝不可,在VBA中调用工作表函数需要用到 WorksheetFunction对象,例如: Work ...
- [saiku] 配置spring-security 允许 iframe加载saiku首页
最近提出了一个需求:在一个iframe中展现saiku首页 呵呵,这还不简单. 直接<iframe src="http://localhost:8080/saiku" /&g ...