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中,玩家可 ...
随机推荐
- 几种HtmlEncode的区别(转)
一.C#中的编码 HttpUtility.HtmlDecode.HttpUtility.HtmlEncode与Server.HtmlDecode.Server.HtmlEncode与HttpServe ...
- 给input的按钮控件添加onserverclick事件
前台: <input type="button" value="登录" id="login" onclick="" ...
- Git学习(2)Git 安装
Windows 平台上安装 在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行: 安装包下载地址 ...
- Java字符串处理函数
substring() 它有两种形式,第一种是:String substring(int startIndex)第二种是:String substring(int startIndex,int end ...
- maven项目搭建
一.Maven简介 Maven是基于Java平台的项目构建(mvn clean install).依赖管理(中央仓库,Nexus)和项目信息管理的项目管理工具. Maven是基于项目对象模型(POM) ...
- Android应用Design Support Library完全使用实例
阅读目录 2-1 综述 2-2 TextInputLayout控件 2-3 FloatingActionButton控件 2-4 Snackbar控件 2-5 TabLayout控件 2-6 Navi ...
- CentOS查看CPU、内存、网络流量和磁盘 I/O【转载,待整理】
http://blog.csdn.net/zbyufei/article/details/6413273
- Velocity教程 (zhuan)
http://blog.csdn.net/qq_25237663/article/details/52262532 ****************************************** ...
- linux 后台执行命令
本文主要内容: 1. 设置ctontab文件,并用它来提交作业. 2. 使用at命令来提交作业. 3. 在后台提交作业. 4. 使用nohup命令提交作业. 名词解释: cron 系统调度进程.可以使 ...
- Sqoop安装配置及数据导入导出
前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...