【洛谷】P4594 [COCI2011-2012#5] BLOKOVI
本来已经有一个专门记录洛谷题目的博客了,但这个题之毒瘤。。。。。。
为你专门写一篇总行了吧。。。。。。
先说一句,这个题每次摆放都靠到最右边不一定是最优的
因为它可以这个亚子
就是说上面那个块太重了,可以把下面向右伸的块压住(这不就是样例吗嘚瑟个啥
接下来说一说正解的思路
从下往上放的时候,每一次加入都要考虑每一层重心的变化,很麻烦,所以还是从上往下放(相当于插入
然后发现插入最底下那一层的矩形时,因为这个矩形不能变,所以上方的n-1个矩形肯定是越靠右越优
最右的时候就是当上方的n-1矩形的重心恰好在它的右端点。
此时答案就相当于最右端点到重心的距离
所以我们可以去求最右端点到当前重心距离的最值
设$dp[i]$表示前$i$个矩形摆放好后最右端点到它们的重心距离的最大值
接下来可以来试着从$dp[i-1]$递推到$dp[i]$
先从理论计算的角度来看,接下来的转移方法来自别人的博客,思路是枚举前$i-1$个矩形的重心在第$i$个矩形的位置然后找到最值。
我们假设已知当前积木$i$质量$mass$,之前所有积木质量$M$,
以积木$i$的左端点为原点,设$i−1$块积木构成的整体的重心在$X$轴的坐标为$x,x∈[0,2]$
新的重心横坐标
$$NewCentre=\frac {M \times x+1 \times mass} {M+mass} =\frac {M \times x+mass}{M+mass}$$
新的最右端可能有两个,一个是之前的那个最右端,另一个是当前木块的右端,取$max$得到坐标就好了
$$Right=Max(2,x+dp[i−1])$$
所以
$$dp[i]=Max(2,x+dp[i−1])− \frac {M \times x+mass}{M+mass}$$
$$=\frac {Max(2 \times M+2 \times mass,x \times (M+mass)+dp[i−1] \times(M+mass))−M \times x−mass}{M+mass}$$
$$=\frac {Max((2−x) \times M+mass,(x−1) \times mass+dp[i−1] \times (M+mass))}{M+mass}$$
可以发现,$Max()$中的两个式子,一个是随着$x$上升单调递增,一个是随着$x$上升单调递减的,均满足单调性,因此直接考虑x=0,2完全是可以的,换句话说,即一个是重心在左端点,一个是重心在右端点.所以答案是在这两个地方产生的。
所以转移的时候直接枚举前$i-1$个矩形的重心是放在左端点还是右端点就行了。
也可以画图理解
红线代表前i-1个矩形的重心所在的垂直于地面的直线,深蓝色是最右端的位置,绿色就是$dp[i-1]$,橙色是第$i$个矩形的重心
先明确目标,我们要找到新重心到原来的右端点距离,即新重心到蓝色直线的距离的最值,
还有新重心到当前矩形的右端点的距离的最值
先求最右端点到新重心距离的最值,我们把新的重心所在直线画出来
就是这条浅紫色的线
根据物理的杠杆原理(雾,其实是感性理解)
新重心所在直线到前i-1个矩形重心所在直线的距离 与 新重心所在直线到第i个矩形重心所在直线的距离 的比例为它们重量的反比
即黄色线段与粉色线段长度的比例为重量的反比。
这个比例我们不用知道具体是多少,只需要知道这个比例只跟重量有关,而前i-1个矩形的重量与第i个矩形的重量是固定的
所以黄色线段与粉色线段的比例是固定的
又发现黄色线段加上粉色线段就是橙色点到红色线段的距离,即原来的两个重心所在直线的距离
所以,原来的两个重心所在直线的距离越长,黄色线段越长。
而新重心到原来右端点的距离就是黄色线段加上绿色线段,且绿色线段的长度是固定的
所以,原来的两个重心所在直线的距离越长,新重心到以前右端点的距离越长。
当然,这只限于红线在右边的情况,还有红线在左边的情况
总之最后可以得出结论,红线越往右,新重心到以前右端点的距离越长,最右的时候就是红线恰好在矩形的右端点处。
接下来看新重心到矩形右端点的最值
就是浅紫色直线到矩形右端点的最值
显然,前i-1的矩形的重心越靠左,新的重心越靠左
即红色直线越靠左,浅色直线越靠左,距离矩形右端点的距离就越远
红色直线最左在矩形左端点,此时新重心到矩形右端点的距离取到最值
所以
新重心到矩形右端点的最值是当红色直线在矩形左端点取得
新重心到以前右端点的最值是当红色直线在矩形右端点取得
所以只需要考虑原来重心在左端点和原来重心在右端点的情况
最终思路就是把矩形从上往下放,记录重心道最右端点的距离,
每次转移只考虑之前重心在左端点和之前重心在右端点的情况
Code
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- const int maxn=;
- int n,a[maxn];double sum,ans;
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;i++)scanf("%d",&a[i]);
- for(int i=n;i>;i--)
- {
- sum+=a[i];
- double del=double(a[i])/sum;
- ans=max(ans,max(ans+del,-del));
- }
- printf("%.8lf",ans);
- }
【洛谷】P4594 [COCI2011-2012#5] BLOKOVI的更多相关文章
- 洛谷 3833 SHOI 2012 魔法树
[题解] 树链剖分模板题.. #include<cstdio> #include<algorithm> #include<queue> #define N 5000 ...
- 洛谷 P1083 [ NOIP 2012 ] 借教室 —— 线段树 / 二分差分数组
题目:https://www.luogu.org/problemnew/show/P1083 当初不会线段树的时候做这道题...对差分什么不太熟练,一直没A,放在那儿不管... 现在去看,线段树就直接 ...
- [洛谷OJ] P1114 “非常男女”计划
洛谷1114 “非常男女”计划 本题地址:http://www.luogu.org/problem/show?pid=1114 题目描述 近来,初一年的XXX小朋友致力于研究班上同学的配对问题(别想太 ...
- 洛谷P1078 文化之旅
P1078 文化之旅 1.1K通过 3.6K提交 题目提供者洛谷OnlineJudge 标签NOIp普及组2012 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨 ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- switch的对象不能为null
我写的NPE 虽然不多, 但几乎每次系统出问题的时候,看到api返回值是空的,绝大多数是NPE造成的. 这时候会感慨一下谁写的bug,然后去补判空代码. 最近抽风,开始给自己写的代码添加UnitTes ...
- 【转】C#各版本新增加功能
本系列文章主要整理并介绍 C# 各版本的新增功能. C# 8.0 C#8.0 于 2019年4月 随 .NET Framework 4.8 与 Visual Studio 2019 一同发布,但是当前 ...
- mysql参数之innodb_buffer_pool_size大小设置
用于缓存索引和数据的内存大小,这个当然是越多越好, 数据读写在内存中非常快, 减少了对磁盘的读写. 当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中.然而内存还有操作系统或数据库其他进程使用 ...
- 从零开始实现放置游戏(六)——实现后台管理系统(4)Excel批量导入
前面我们已经实现了在后台管理系统中,对配置数据的增删查改.但每次添加只能添加一条数据,实际生产中,大量数据通过手工一条一条添加不太现实.本章我们就实现通过Excel导入配置数据的功能.这里我们还是以地 ...
- 大话区块链【Blockchain】
最近这几天区块链又粉墨登场了,新闻媒体也一直在大量报道,宣称可能要在金融界掀起一番浪潮.甚至有人说很久之前中国就出现了区块链的产物——麻将.那么区块链到底是什么,麻将和区块链又有什么关系呢? 笔者这两 ...
- laravel 163发送邮件
配置163邮箱账户 首先需要有163邮箱,这里在163邮箱必须在设置里面开启SMTP服务,并设置密码 修改laravel根目录下的.env文件, 设置邮箱相关内容: MAIL_DRIVER=smtp ...
- CTF必备技能丨Linux Pwn入门教程——ROP技术(下)
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...
- OC-bug: Undefined symbols for architecture i386: "_OBJC_CLASS_$_JPUSHRegisterEntity", referenced from:
bug的提示: Undefined symbols for architecture i386: "_OBJC_CLASS_$_JPUSHRegisterEntity", refe ...
- windows删除桌面右键“英特尔@显卡设置”
运行中输入:regedit 确认运行注册表编辑器,依次单击展开 HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers键 ...
- nginx 的 一些配置说明
default 配置参考https://www.cnblogs.com/kuku0223/p/10740735.html 设置了default 除了指定的域名, 如果是没有配置的域名解析过来 ...