题目描述

你是一只小跳蛙,你特别擅长在各种地方跳来跳去。

这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0h0​=0。你估计着,从第 ii 块石头跳到第 jj 块石头上耗费的体力值为 (h_i - h_j) ^ 2(hi​−hj​)2,从地面跳到第 ii 块石头耗费的体力值是 (h_i) ^ 2(hi​)2。

为了给小 F 展现你超级跳的本领,你决定跳到每个石头上各一次,并最终停在任意一块石头上,并且小跳蛙想耗费尽可能多的体力值。

当然,你只是一只小跳蛙,你只会跳,不知道怎么跳才能让本领更充分地展现。

不过你有救啦!小 F 给你递来了一个写着 AK 的电脑,你可以使用计算机程序帮你解决这个问题,万能的计算机会告诉你怎么跳。

那就请你——会写代码的小跳蛙——写下这个程序,为你 NOIp AK 踏出坚实的一步吧!

输入输出格式

输入格式:

输入一行一个正整数 nn,表示石头个数。

输入第二行 nn 个正整数,表示第 ii 块石头的高度 h_ihi​。

输出格式:

输出一行一个正整数,表示你可以耗费的体力值的最大值。

输入输出样例

输入样例#1: 复制

2
2 1
输出样例#1: 复制

5
输入样例#2: 复制

3
6 3 5
输出样例#2: 复制

49

说明

样例解释

两个样例按照输入给定的顺序依次跳上去就可以得到最优方案之一。

数据范围

对于 1 \leq i \leq n1≤i≤n,有 0 < h_i \leq 10 ^ 40<hi​≤104,且保证 h_ihi​ 互不相同。

对于 10\%10% 的数据,n \leq 3n≤3;

对于 20\%20% 的数据,n \leq 10n≤10;

对于 50\%50% 的数据,n \leq 20n≤20;

对于 80\%80% 的数据,n \leq 50n≤50;

对于 100\%100% 的数据,n \leq 300n≤300。

题解

先跳个最大的,然后跳到最小的,然后跳到没跳过的最大的,再跳到没跳过的最小的......

正确性证明:设$a>b>c>d$,则需证$(a-d)^2+(b-c)^2>(a-c)^2+(b-d)^2$

$a^2+b^2+c^2+d^2-2*a*d-a*b*c>a^2+b^2+c^2+d^2-2*a*c-2*b*d$

$a*c+b*d>b*c+a*d$

$a*(c-d)>b*(c-d)$

$a>b$

所以$(a-d)^2+(b-c)^2>(a-c)^2+(b-d)^2$

然后太懒了,所以拿了两个堆维护当前要取的最大(最小)数。

 /*
qwerta
P4995 跳跳! Accepted
100
代码 C++,0.51KB
比赛 【LGR-055】洛谷11月月赛
提交时间 2018-11-04 09:07:06
耗时/内存 25ms, 788KB
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
priority_queue<int>p;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;++i)
{
int x;
scanf("%d",&x);
p.push(x);
q.push(x);
}
int bef=;
long long ans=;
for(int i=;i<=n;++i)
{
if(i&)//奇数次取大的
{
int x=p.top();
p.pop();
ans+=(x-bef)*(x-bef);
bef=x;
}
else//偶数次取小的
{
int x=q.top();
q.pop();
ans+=(x-bef)*(x-bef);
bef=x;
}
}
cout<<ans;
return ;
}

最新文章

  1. Fedora17安装MySQL及配置
  2. 20145223《Java程序程序设计》第4周学习总结
  3. 【Mood-5】14条建议,使你的IT职业生涯更上一层楼
  4. html Table实现表头固定
  5. 一键安装IIS的点点滴滴——For所有Microsoft的操作系统(上)
  6. .NET Core 2.0下载和文档
  7. AtCoder Grand Contest 021 D - Reversed LCS
  8. shell date命令
  9. ESP8266串口和MQTT服务器消息互传(版本一) 单纯透传+保存WIFI账号信息
  10. [luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】
  11. oracle数据库还原以及备份 包括快速备份(并发压缩)
  12. vue面试
  13. 『计算机视觉』经典RCNN_其一:从RCNN到Faster-RCNN
  14. stack堆栈容器、queue队列容器和priority_queue优先队列容器(常用的方法对比与总结)
  15. linux测试带宽命令,Linux服务器网络带宽测试iperf
  16. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) A. Bear and Game 水题
  17. 邮件欺诈与SPF防御
  18. 洛谷 P1202 [USACO1.1]黑色星期五Friday the Thirteenth 题解
  19. 180620-mysql之数据库导入导出
  20. 浅谈------location

热门文章

  1. 转:office 2016最新安装及激活教程(KMS)
  2. ORACLE经常使用系统查询
  3. hdu1081 最大子矩阵
  4. Spring利用propertyConfigurer类 读取.property数据库配置文件
  5. 有一个长为n的数组A,求满足0≤a≤b&lt;n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值。
  6. Spark Streaming和Kafka整合开发指南(二)
  7. C#与Java在修饰符上的不同
  8. 如何在IntelliJ IDEA在线查看源码的API文档
  9. OpenCV 中的三大数据类型:IplImage 类型
  10. EasyPlayerPro Windows播放器实时流进行本地缓冲区即时回放功能实现