luoguP4393Sequence
https://www.luogu.org/problem/P4393
题意
给你n个点的一个数列,每次可以合并两个相邻的数为他们的最大值,且代价为这两个数的最大值,求将整个序列合并为1个数的最小代价
n≤1e6
分析
个人做这题很玄.....
我们先考虑三个数a,b,c , 且序列的顺序为{a, b, c}的情况...可得
当 a < b < c时,在最优的情况下, 最大值c只有一次被计算在内(即只对最终的代价 的贡献是一个c), 并且,b被算了一次。
当a < b, b > c时, 最大值b被计算了两次,而a和没有被计算在内
这样,多画几个图自己看看(虽然找规律(即找贪心的策略)花费的时间可能比较多...像我做这题的时候就是在纸上涂涂画画...), 然后我们就可以得出贪心策略:
我们将每个点 i 与它左右两边相邻点i-1, i+1比较大小,并记录比a[i]小的相邻点的个数is[i](0, 1 或2),那么a[i]对答案(即最终代价)的贡献就是a[i]*is[i].
证明: a[i]>a[i-1] && a[i]>a[i+1]时, 无论怎么合并 i 两边的数, 到后来, a[i]总被计算两次。
只有一个成立时(假设是a[i]>a[i+1]不成立), a[i]总被计算一次,而a[i+1]的计算次数就 >= 1了,a[i] 一定是与a[i+1]合并的。
注意合并操作的实现和边界1, n的is值即可(其实我也就是试试,谁知道真过了emm....
#include<cstdio>
using namespace std;
#define ll long long
#define MAX 1000000
int n;
int a[MAX];
int is[MAX];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
for(int i = 2; i < n; i++) {
if(a[i] >= a[i+1]) {
is[i]++;
if(a[i] == a[i+1]) is[i+1]--;
}
if(a[i] >= a[i-1])
is[i]++;
}
if(a[1] > a[2]) is[1] = 1;
if(a[n] > a[n-1]) is[n] = 1;
ll ans = 0;
for(int i = 1; i <= n; i++) {
ans += (ll)a[i]*is[i];
}
printf("%lld",ans);
}
luoguP4393Sequence的更多相关文章
随机推荐
- 201871010111-刘佳华《面向对象程序设计(java)》第七周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第七周学习总结 实验时间 2019-10-11 1.实验目的与要求 1) 掌握四种访问权限修饰符的使用特点: (1)进一步理 ...
- MongoDB介绍(一)
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...
- luoguP3975 [TJOI2015]弦论
题意 第一问有一个经典做法:学习笔记 对于第二问,其实就是对于一个状态的所有串,第一问看成一个,第二问看成多个. code: #include<bits/stdc++.h> using n ...
- K-消亡的质数-(简单数学)
https://ac.nowcoder.com/acm/contest/3346/K 题意:判断一个素数p是不是某两个数的立方差. 刚看到这道题一时半会都没有什么思路,看了题解恍然大悟,太久没碰数学或 ...
- FAQ简介
FAQ:问答系统,Frequently Asked Questions 常见问答系统: FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通 ...
- display Flex 盒子模型布局兼容Android UC
<!DOCTYPE html><html><head><meta charset="utf-8"><meta content= ...
- 中国移动明确5G手机入网技术标准:四大要求缺一不可!
原文: https://m.sohu.com/a/355533798_208899?strategyid=00014 日前,中国移动在2020年5G终端产品规划中明确了一系列详细的技术要求,针对明年入 ...
- pytorch——auto-encoders
自动编码器的训练方法: (1)Loss function for binary inputs (2)Loss function for real-valued inputs
- svg描边路径动画
svg描边路径动画<pre><!DOCTYPE html><html> <head> <meta charset="UTF-8" ...
- SourceTree 版本跳过bitbucket注册方法
1.安装sourcetree时 需要选择 bitbucket账号,这个令人头疼 当然肯定有办法来跳过这一步 2.关闭当前安装界面 进入 C:\Users\Administrator\AppData ...