题目大意:

  当一栋楼比旁边两栋楼都高的时候,这栋楼为cool,对除了1和n以外的所有楼可以增加任意层,问在满足使最多的楼cool的前提下的花费最小。

当n为奇数的情况下:

  cool的楼实际上是固定的,只要将他们需要的花费加起来就好。

当n为偶数的情况下:

  cool的楼并不固定,但是他的形式是固定的,要么所有cool楼之间隔一个楼,要么cool楼之间除了一个间隔2,其他全部间隔1;

  所以我们可以通过枚举间隔2来枚举所有情况,取消费的最小值。

  举个例子:0 1 0 1 0 1 0 0 1 0 1 0 /*间隔为2的只有一组*/

 1 void solve() {
2
3 cin >> n;
4 for (int i = 1; i <= n; ++i) {
5 cin >> a[i];
6 b[i] = c[i] = 0;
7 }
8 b[0] = c[0] = b[n + 1] = c[n + 1] = 0;
9 for (int i = 2; i <= n-1; i += 2) {
10 int maxv = max(a[i - 1], a[i + 1]);
11 b[i] += max(1ll*0, 1ll * maxv - a[i] + 1);
12 }
13 for (int i = n - 1; i >= 2; i -= 2) {
14 int maxv = max(a[i - 1], a[i + 1]);
15 c[i] += max(1ll*0, 1ll * maxv - a[i] + 1);
16 }
17 for (int i = 1; i <= n; ++i) b[i] += b[i - 1];/*前缀和*/
18 for (int i = n; i >= 1; --i) c[i] += c[i + 1];/*后缀和*/
19
20 if (n & 1) {
21 cout << b[n - 1] << endl;
22 return;
23 } else {
24 int minn =1e18;
25 for (int i = 1; i <= n; ++i) {
26 minn = min(minn, b[i] + c[i + 1]);/*枚举间隔*/
27 }
28 cout << minn << endl;
29 }
30 }

比较新的就是枚举间隔的方法,用前后缀枚举

其次比较需要注意的是数据范围,超过平常的1e9了,所以注意读题

Codeforces Round #809 (Div. 2)C.Qpwoeirut And The City的更多相关文章

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. B/S结构通信系统原理

    本文介绍JavaWeb的B/S结构通信原理 概念:        Javaweb中B/S架构是一种系统架构形式,这里的B是Browser(浏览器),S是Server(服务器),是一种系统的架构形式,有 ...

  2. JZOJ3542冒泡排序

    题面 下面是一段实现冒泡排序算法的C++代码: for (int i=1;i<=n-1;i++)  for (int j=1;j<=n-i ;j++)  if(a[j]>a[j+1] ...

  3. 【Manim CE】常用Mobject

    当前文档版本:v0.16.0.post0 VMobject 继承自Mobject V的意思是向量化的,vectorized mobject fill_color=None, fill_opacity= ...

  4. 【c语言学习】1 基础环境安装调试

    1-1下载 vs2019 vs2019下载链接https://visualstudio.microsoft.com/zh-hans/vs/community/ 1-2安装配置环境 记得勾选上c++开发 ...

  5. Electron学习(四)之应用程序打包

    highlight: a11y-dark 写在前面 人真的是会变得越来越懒的,也正是人的惰性吧,真的是很讽刺. 关于这个应用程序的开发,断更了很久,但是代码部分还算没落下吧,终于在周一.周二终把这个应 ...

  6. Java开发学习(三十一)----Maven属性与版本管理

    一.属性 1.1 问题分析 如下图所示 你会发现,如果现在想更新Spring的版本,你会发现依然需要更新多个jar包的版本,这样的话还是有可能出现漏改导致程序出问题,而且改起来也是比较麻烦. 问题清楚 ...

  7. MariaDB数据库 主-从 部署

    〇.前言 好久没碰数据库了 准备环境: centos7自带的MariaDB,没有的话下面是安装命令 yum install -y mariadb mariadb-server systemctl re ...

  8. 《Java基础——数组的定义与使用》

    Java基础--数组的定义与使用       一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...

  9. Java SE 3、封装

    封装 封装的好处 隐藏实现细节 可以对数据进行验证,保证安全合理 实现步骤 将属性进行私有化private 提供一个公共的(public)set方法,用于对属性判断并赋值 public void se ...

  10. Kubernetes 监控--PromQL

    Prometheus 通过指标名称(metrics name)以及对应的一组标签(label)唯一定义一条时间序列.指标名称反映了监控样本的基本标识,而 label 则在这个基本特征上为采集到的数据提 ...