感觉这题的状态还是比较明显的。设置状态 \(f[i][j][0/1]\) 表示dp到第 \(i\) 个位置,前面(包括这里)已经出现了 \(j\) 个山峰,当前位置是不是山峰即可 dp。这样的状态有一个很优秀的性质:我们注意到在最后的答案当中,我们一定不会去修改山峰的高度(这样做显然毫无意义)。那么这样dp我们可以通过分类讨论直接计算出使一个节点成为山峰的代价。

  如:降低一个位置使得前面与后面均为山峰,降低到小于两者的高度。降低一个位置使得后一个位置为山峰,降低一个位置使得前一个位置为山峰,都只要降低到为山峰的位置更低即可。复杂度很高,但codeforces经常都是玄学复杂度……( • ̀ω•́ )✧

#include <bits/stdc++.h>
using namespace std;
#define maxn 100000
#define int long long
#define INF 999999999999LL
int n, K, a[maxn], f[][maxn][]; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} int Check(int x, int y, int z) { int t = min(y, z); return x >= t ? x - t + : ; }
void Down(int &x, int y) { x = x < y ? x : y; } signed main()
{
n = read(), K = (n >> ) + ; if(!(n & )) K -= ;
for(int i = ; i <= n; i ++) a[i] = read();
int fore = , pre = , now = ;
for(int i = ; i <= ; i ++)
for(int j = ; j < maxn; j ++)
f[i][j][] = f[i][j][] = INF;
f[fore][][] = f[pre][][] = ;
for(int i = ; i <= n; i ++)
{
int t = (i >> ) + ;
for(int j = ; j < maxn; j ++)
f[now][j][] = f[now][j][] = INF;
for(int j = ; j <= i; j ++)
{
int t1, t2, t3;
if(i > ) t1 = a[i - ], t2 = a[i - ], t3 = a[i];
else if(i > ) t1 = -INF, t2 = a[i - ], t3 = a[i];
else t1 = -INF, t2 = -INF, t3 = a[i];
Down(f[now][j][], f[fore][j - ][] + Check(t2, t1, t3));
Down(f[now][j][], f[fore][j - ][] + Check(t2, t3, INF));
Down(f[now][j][], f[pre][j][] + Check(t3, t2, INF));
Down(f[now][j][], f[pre][j][]);
}
int tem = fore; fore = pre, pre = now, now = tem;
}
for(int i = ; i <= K; i ++)
printf("%I64d ", min(f[pre][i][], f[pre][i][]));
puts("");
return ;
}

【题解】CF#1012 C-Hill的更多相关文章

  1. 竞赛题解 - CF Round #524 Div.2

    CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...

  2. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思维)

    还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cst ...

  3. 【bzoj题解】1012 最大数

    题目描述 现在请求你维护一个数列,要求提供以下两种操作:1.查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2.插入操作.语法:A ...

  4. 竞赛题解 - [CF 1080D]Olya and magical square

    Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...

  5. [题解] [CF 1250J] The Parade

    题面 题目大意: 给定一个 \(n\) , 所有军人的数量均在 \([1, n]\) 给定 \(a_i\) 代表高度为 \(i\) 的军人的个数 你要将这些军人分成 \(k\) 行, 满足下面两个条件 ...

  6. 题解 CF 1372 B

    题目 传送门 题意 给出 \(n\),输出 \(a\) ,\(b\) (\(0 < a \leq b < n\)),使\(a+b=n\)且 \(\operatorname{lcm}(a,b ...

  7. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T4(模拟)

    随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> ...

  8. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T3(贪心)

    是一道水题 虽然看起来像是DP,但其实是贪心 扫一遍就A了 QwQ #include <cstdio> #include <algorithm> #include <cs ...

  9. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T2(模拟)

    题目要求很简单,做法很粗暴 直接扫一遍即可 注意结果会爆int #include <cstdio> #include <algorithm> #include <cstr ...

随机推荐

  1. Linux下安装Nginx并实现socket代理

    nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译环 ...

  2. ThinkPHP开启设置子域名笔记

    一.ThinkPHP框架里 common下的config文件 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' =& ...

  3. android自动化のadb常用命令(不定期更新)

    1. adb devices 执行结果是adb为每一个设备输出以下状态信息:序列号(serialNumber) — 由adb创建的使用控制台端口号的用于唯一标识一个模拟器或手机设备的字符串,格式是 & ...

  4. 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  5. 【wx:for】小程序列表渲染的使用说明

    wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件. 默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item,即: {{index}} . {{it ...

  6. ionic 获取input的值

    1.参数传递法 例子:获取input框内容 这里有个独特的地方,直接在input处使用 #定义参数的name值,注意在ts中参数的类型 在html页面中 <ion-input type=&quo ...

  7. Java并发简介

    年轻的时候学会了“使用”Servlet后,感觉自己什么都会做了,之后就不停的写所谓的业务逻辑,框架(这里说的不是structs,spring等,就是说servlet)给人们屏蔽了很多复杂性(更别说构建 ...

  8. anaconda安装scrapy报错解决办法

    今天在用anaconda安装scrapy的时候遇见个坑,现在将解决办法发出来,供大家参考使用: 问题描述: anaconda安装scrapy,使用 conda install scrapy 命令.安装 ...

  9. 关于LNMP常见问题和性能方面的个人理解

    简单整理,自己做备忘的,不为其他作任何参考- PHP程序 1.开启慢日志,过滤超时时间为1s的方法,针对性优化,可以通过添加缓存方式解决. 2.过滤access日志,统计哪些请求较多较为频繁,是否合理 ...

  10. 第一次课堂作业---circle

    链接:circle