CF1012C Hills

题目描述

Welcome to Innopolis city. Throughout the whole year, Innopolis citizens suffer from everlasting city construction.

From the window in your room, you see the sequence of n n n hills, where i i i -th of them has height a i a_i ai​ . The Innopolis administration wants to build some houses on the hills. However, for the sake of city appearance, a house can be only built on the hill, which is strictly higher than neighbouring hills (if they are present). For example, if the sequence of heights is 5 , 4 , 6 , 2 5,4,6,2 5,4,6,2 , then houses could be built on hills with heights 5 5 5 and 6 6 6 only.

The Innopolis administration has an excavator, that can decrease the height of an arbitrary hill by one in one hour. The excavator can only work on one hill at a time. It is allowed to decrease hills up to zero height, or even to negative values. Increasing height of any hill is impossible. The city administration wants to build k k k houses, so there must be at least k k k hills that satisfy the condition above. What is the minimum time required to adjust the hills to achieve the administration’s plan?

However, the exact value of k k k is not yet determined, so could you please calculate answers for all k k k in range 1 ≤ k ≤ ⌈ n 2 ⌉ 1\leq k \leq \lceil \frac n2\rceil 1≤k≤⌈2n​⌉? Here ⌈ n 2 ⌉ \lceil \frac n2\rceil ⌈2n​⌉ denotes n n n divided by two, rounded up.

输入格式

第一行一个正整数 n n n。

第二行 n n n 个正整数 a i a_i ai​。

输出格式

一行 ⌈ n 2 ⌉ \left\lceil\dfrac{n}{2}\right\rceil ⌈2n​⌉ 个数,第 i i i 个数代表 k = i k=i k=i 时的答案

样例1

样例输入1
5
1 1 1 1 1
样例输出1
1 2 2

样例2

样例输入2
3
1 2 3
样例输出2
0 2

样例3

样例输入3
5
1 2 3 2 2
样例输出3
0 1 3

数据范围

1 ≤ n ≤ 5000 1≤n≤5000 1≤n≤5000

1 ≤ a i ≤ 100000 1≤ai≤100000 1≤ai≤100000

题目大意

给你 n n n个数,你一次操作可以把某一个数减一(可以减为负数),你的目标是使任意的 k k k个数严格大于它旁边的两个数(第一个数只用严格大于第二个数,第 n n n个数只用严格大于第 n − 1 n-1 n−1个数),问最少需要几次操作。 k k k是不确定的,请输出 k ∈ [ 1 , ⌈ n 2 ⌉ ] k\in[1,\left\lceil\frac{n}{2}\right\rceil] k∈[1,⌈2n​⌉] 时的答案。

题解

设 f i , j f_{i,j} fi,j​表示前 i i i个中有 j j j个被选中,且第 i i i个被选中所需的最小时间。则状态转移式为:

f i , j = min ⁡ ( min ⁡ k = 1 i − 2 f k , j − 1 + w i − 1 , i , f i − 2 , j − 1 + max ⁡ ( w i − 1 , i , w i , i + 1 ) ) f_{i,j}=\min(\min\limits_{k=1}^{i-2}{f_{k,j-1}+w_{i-1,i}},\quad f_{i-2,j-1}+\max(w_{i-1,i},w_{i,i+1})) fi,j​=min(k=1mini−2​fk,j−1​+wi−1,i​,fi−2,j−1​+max(wi−1,i​,wi,i+1​))

其中 w i , j w_{i,j} wi,j​表示将 a i a_i ai​的高度减少至 a i < a j a_i<a_j ai​<aj​,显然 w i , j = max ⁡ ( 0 , a i − a j + 1 ) w_{i,j}=\max(0,a_i-a_j+1) wi,j​=max(0,ai​−aj​+1)。不需要预处理,用的时候直接求即可。

当然,如果这样做,时间复杂度为 O ( n 3 ) O(n^3) O(n3),会TLE,所以我们考虑优化。

可以发现,每次都会用到 min ⁡ k = 1 i − 2 f k , j − 1 + w i − 1 , i \min\limits_{k=1}^{i-2}{f_{k,j-1}+w_{i-1,i}} k=1mini−2​fk,j−1​+wi−1,i​。所以我们设 g i , j = min ⁡ k = 1 i − 2 f k , j − 1 + w i − 1 , i g_{i,j}=\min\limits_{k=1}^{i-2}{f_{k,j-1}+w_{i-1,i}} gi,j​=k=1mini−2​fk,j−1​+wi−1,i​,每次求 f f f值时顺便更新 g g g值,最后 min ⁡ j = i n f j , i \min\limits_{j=i}^n f_{j,i} j=iminn​fj,i​即为选 i i i座山的答案。

code

#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
long long ans,g[5005],f[5005][2505];
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}for(int i=0;i<=n;i++){for(int j=1;j<=(n+1)/2;j++) f[i][j]=1e18;g[i]=1e18;}for(int i=1;i<=n;i++){f[i][1]=max(0,a[i-1]-a[i]+1)+max(0,a[i+1]-a[i]+1);}for(int i=2;i<=n;i++){for(int j=2;j<=(i+1)/2;j++){f[i][j]=min(g[j-1]+max(0,a[i-1]-a[i]+1),f[i-2][j-1]-max(0,a[i-1]-a[i-2]+1)+max(0,a[i-1]-min(a[i],a[i-2])+1))+max(0,a[i+1]-a[i]+1);}for(int j=1;j<=(i+1)/2;j++){g[j]=min(g[j],f[i-2][j]);}}for(int i=1;i<=(n+1)/2;i++){ans=1e18;for(int j=i;j<=n;j++) ans=min(ans,f[j][i]);printf("%lld ",ans);}return 0;
}

CF1012C Hills相关推荐

  1. Codeforces2000分左右DP泛刷

    乱七八糟的DP题随便刷刷 文章目录 CF148E - Porcelain CF1131D - Gourmet choice CF629C - Famil Door and Brackets CF895 ...

  2. Hills And Valleys CodeForces - 1467B

    Hills And Valleys CodeForces - 1467B 题意: 修改数列中的 一个 数字 使得峰(波峰.波谷)的数量最少 题解: 修改一个数,最多只能影响左右两个数,所能减少的峰的数 ...

  3. 详解AUTOSAR:Green Hills Software(GHS)编译下载瑞萨RH850程序(环境配置篇—2)

    目录 1.配置烧录器参数 2.仿真烧录程序 在学习本篇博文之前,可以先看一看:Green Hills Software(GHS)的安装和申请License文件. 使用GHS编译下载瑞萨RH850程序方 ...

  4. 适用于 BMW iX 的 Green Hills Software 安全解决方案,以及 eSync OTA

    在 CES 2022 上,Green Hills Software 宣布 BMW 的 iX 车辆正在使用其实时操作系统 (RTOS).集成开发环境 (IDE) 和其他安全软件,同时还宣布了兼容 eSy ...

  5. Hills And Valleys CodeForces - 1467B 思维

    给你一个数组,最多可以修改一个数,问最少的山峰和山谷数量之和. 小菜鸡做了一年. 一上来想猜个结论,让每个数等于其相邻的两个数,看了题解之后也证明的正确性,当时直接写就没后面这么多事了. 但是命运让我 ...

  6. html5 deckview,六本木Hills出現超大型巨人?進擊的巨人展FINAL×頂樓Sky Deck的VR體驗...

    戶外複合型度假區「相模湖森林度假遊樂園」將從2019年7月20日(六)-8月30日(五)這段期間展開超人氣動畫<進擊的巨人>與超人氣競技設施「MUSCLE MONSTER」的合作企劃「進擊 ...

  7. Green Hills Software GHS MULTI安装过程介绍

    博主联系方式:QQ:1256153255 ,邮箱:1256153255@qq.com 点击这里可下载GHS安装包 对于车载小伙伴来说,使用瑞萨的单片机是非常常见的选择,而适用于瑞萨单片机的编译器也是有 ...

  8. NXP智能驾驶软件系统

    NXP智能驾驶软件系统 ADAS和高度自动驾驶 汽车解决方案 市场领先的ADAS解决方案 先进的驾驶员辅助系统(ADAS)提供了安全的.日益自动化的驾驶体验,这将重塑出行关系.自动驾驶技术将很快让乘客 ...

  9. 预测汽车级Linux专业技术的需求

    预测汽车级Linux专业技术的需求 Anticipating need for Automotive Grade Linux expertise 在听了多年汽车级Linux(AGL)及其所有潜力之后, ...

最新文章

  1. 使用MASM04 - Win32汇编语言012
  2. 皮一皮:这样的领导还有吗
  3. python中自定义变量名标识符_name是python的标识符吗
  4. Visual-FoxPro常用命令word版
  5. 把学单片机过程中遇到的问题与大家分享
  6. 不使用注解和使用注解的web-service-dao结构
  7. URLSearchParams 接口
  8. fortigate的RADIUS域用户的组认证为SSL×××用户(上)
  9. 我买的开发板——大虾网DX32(for STM32)
  10. java 调用 axis2_java调用WebService服务 axis2实现方式
  11. Android Studio Entry name *.xml collided解决方案
  12. ActiveX:ActiveX控件安装、dllregisterserver的调用失败
  13. Ubuntu下编译vtk(java版本)【超详细-带过程截图】
  14. clone远程代码 在不同电脑上git_Git 同一电脑配置多个远程仓库
  15. 失业七个月,面试六十家公司
  16. ppt不能保存我html,powerpoint无法保存怎么解决
  17. PL/SQL破解方法(不需要注册码)
  18. 由键盘输入正数n,要求输出如下2*n+1行的菱形图案。用c语言实现。
  19. 数据库修改表中的数据(SqlServer)
  20. LNZ32P4-C - Pan-Tilt-Zoom (PTZ) Camera with 1080p HD Video Color Night Vision

热门文章

  1. ExpRe[18] 手动构建Docker镜像[1] 指定cuda、python包版本
  2. Reverse | 使用UPX对软件进行加壳
  3. attempted relative import with no known parent package,已解决
  4. 大数据时代,我们应该怎么防止我们的个人信息泄露?
  5. mysql 读写分离软件_MySQL Atlas 读写分离软件介绍
  6. 华为年薪201万的“顶尖人才”,看完他们的履历我哭了...
  7. 树莓派I2C发送大数据的坑 lattice crosslink配置
  8. 仿小米商城和登录的静态页面
  9. idea 报错java程序包不存在,但实际并未有异常
  10. 亲密关系科学(01)婆媳相处原则-36计