CF1012C Hills
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−2fk,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−2fk,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−2fk,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=iminnfj,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相关推荐
- Codeforces2000分左右DP泛刷
乱七八糟的DP题随便刷刷 文章目录 CF148E - Porcelain CF1131D - Gourmet choice CF629C - Famil Door and Brackets CF895 ...
- Hills And Valleys CodeForces - 1467B
Hills And Valleys CodeForces - 1467B 题意: 修改数列中的 一个 数字 使得峰(波峰.波谷)的数量最少 题解: 修改一个数,最多只能影响左右两个数,所能减少的峰的数 ...
- 详解AUTOSAR:Green Hills Software(GHS)编译下载瑞萨RH850程序(环境配置篇—2)
目录 1.配置烧录器参数 2.仿真烧录程序 在学习本篇博文之前,可以先看一看:Green Hills Software(GHS)的安装和申请License文件. 使用GHS编译下载瑞萨RH850程序方 ...
- 适用于 BMW iX 的 Green Hills Software 安全解决方案,以及 eSync OTA
在 CES 2022 上,Green Hills Software 宣布 BMW 的 iX 车辆正在使用其实时操作系统 (RTOS).集成开发环境 (IDE) 和其他安全软件,同时还宣布了兼容 eSy ...
- Hills And Valleys CodeForces - 1467B 思维
给你一个数组,最多可以修改一个数,问最少的山峰和山谷数量之和. 小菜鸡做了一年. 一上来想猜个结论,让每个数等于其相邻的两个数,看了题解之后也证明的正确性,当时直接写就没后面这么多事了. 但是命运让我 ...
- html5 deckview,六本木Hills出現超大型巨人?進擊的巨人展FINAL×頂樓Sky Deck的VR體驗...
戶外複合型度假區「相模湖森林度假遊樂園」將從2019年7月20日(六)-8月30日(五)這段期間展開超人氣動畫<進擊的巨人>與超人氣競技設施「MUSCLE MONSTER」的合作企劃「進擊 ...
- Green Hills Software GHS MULTI安装过程介绍
博主联系方式:QQ:1256153255 ,邮箱:1256153255@qq.com 点击这里可下载GHS安装包 对于车载小伙伴来说,使用瑞萨的单片机是非常常见的选择,而适用于瑞萨单片机的编译器也是有 ...
- NXP智能驾驶软件系统
NXP智能驾驶软件系统 ADAS和高度自动驾驶 汽车解决方案 市场领先的ADAS解决方案 先进的驾驶员辅助系统(ADAS)提供了安全的.日益自动化的驾驶体验,这将重塑出行关系.自动驾驶技术将很快让乘客 ...
- 预测汽车级Linux专业技术的需求
预测汽车级Linux专业技术的需求 Anticipating need for Automotive Grade Linux expertise 在听了多年汽车级Linux(AGL)及其所有潜力之后, ...
最新文章
- 使用MASM04 - Win32汇编语言012
- 皮一皮:这样的领导还有吗
- python中自定义变量名标识符_name是python的标识符吗
- Visual-FoxPro常用命令word版
- 把学单片机过程中遇到的问题与大家分享
- 不使用注解和使用注解的web-service-dao结构
- URLSearchParams 接口
- fortigate的RADIUS域用户的组认证为SSL×××用户(上)
- 我买的开发板——大虾网DX32(for STM32)
- java 调用 axis2_java调用WebService服务 axis2实现方式
- Android Studio Entry name *.xml collided解决方案
- ActiveX:ActiveX控件安装、dllregisterserver的调用失败
- Ubuntu下编译vtk(java版本)【超详细-带过程截图】
- clone远程代码 在不同电脑上git_Git 同一电脑配置多个远程仓库
- 失业七个月,面试六十家公司
- ppt不能保存我html,powerpoint无法保存怎么解决
- PL/SQL破解方法(不需要注册码)
- 由键盘输入正数n,要求输出如下2*n+1行的菱形图案。用c语言实现。
- 数据库修改表中的数据(SqlServer)
- LNZ32P4-C - Pan-Tilt-Zoom (PTZ) Camera with 1080p HD Video Color Night Vision
热门文章
- ExpRe[18] 手动构建Docker镜像[1] 指定cuda、python包版本
- Reverse | 使用UPX对软件进行加壳
- attempted relative import with no known parent package,已解决
- 大数据时代,我们应该怎么防止我们的个人信息泄露?
- mysql 读写分离软件_MySQL Atlas 读写分离软件介绍
- 华为年薪201万的“顶尖人才”,看完他们的履历我哭了...
- 树莓派I2C发送大数据的坑 lattice crosslink配置
- 仿小米商城和登录的静态页面
- idea 报错java程序包不存在,但实际并未有异常
- 亲密关系科学(01)婆媳相处原则-36计