铺设道路
题目链接
春春是一名道路工程师,负责铺设一条长度为 nn 的道路。
铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 nn 块首尾相连的区域,一开始,第 ii 块区域下陷的深度为 d_id i 。
春春每天可以选择一段连续区间[L,R][L,R] ,填充这段区间中的每块区域,让其下陷深度减少 11。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 00 。
春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 00 。
输入格式
输入文件包含两行,第一行包含一个整数 nn,表示道路的长度。 第二行包含 nn 个整数,相邻两数间用一个空格隔开,第ii 个整数为 d_id i。
输出格式
输出文件仅包含一个整数,即最少需要多少天才能完成任务。
样例输入
6
4 3 2 5 3 5
样例输出
9
【样例解释】
一种可行的最佳方案是,依次选择: [1,6]、[1,6]、[1,2]、[1,1]、[4,6]、[4,4]、[4,4]、[6,6]、[6,6]。
思路
- 利用贪心的思想寻找到最少的步骤
- 寻找规律只有当当前坑的深度>前一个坑的深度需要多加操作
坑点
- 时间限制需要优化
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int ans=a[0];//初始为第一个坑的深度
for(int i=1;i<n;i++)
{
if(a[i]>a[i-1])
{
ans+=a[i]-a[i-1];
}
}
cout<<ans;
return 0;
}
总结
思维题
4262. 空调
题目链接
Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。
有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。
Farmer John 的牛棚包含一排 N 个牛栏,编号为 1…N,每个牛栏里有一头牛。
第 i 头奶牛希望她的牛栏中的温度是 pi,而现在她的牛栏中的温度是 ti。
为了确保每头奶牛都感到舒适,Farmer John 安装了一个新的空调系统。
该系统进行控制的方式非常有趣,他可以向系统发送命令,告诉它将一组连续的牛栏内的温度升高或降低 1 个单位——例如「将牛栏 5…8 的温度升高 1 个单位」。
一组连续的牛栏最短可以仅包含一个牛栏。
请帮助 Farmer John 求出他需要向新的空调系统发送的命令的最小数量,使得每头奶牛的牛栏都处于其中的奶牛的理想温度。
输入格式
输入的第一行包含 N。
下一行包含 N 个非负整数 p1…pN,用空格分隔。
最后一行包含 N 个非负整数 t1…tN。
输出格式
输出一个整数,为 Farmer John 需要使用的最小指令数量。
样例输入
5
1 5 3 3 4
1 2 2 2 1
样例输出
5
初始温度 :1 2 2 2 1
升高牛棚 2…5:1 3 3 3 2
升高牛棚 2…5:1 4 4 4 3
升高牛棚 2…5:1 5 5 5 4
降低牛棚 3…4:1 5 4 4 4
降低牛棚 3…4:1 5 3 3 4
思路
- 利用贪心的思想寻找到最少的步骤
- 和上一题思路相同,但存在可以同时减一或加一的条件
- 将正负值分开讨论更清晰方便
坑点
- 需判断是否为第一个正值或负值
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],b[N],c[N];
int main()
{
int n;
cin>>n;
int ans=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
cin>>b[i];
c[i]=a[i]-b[i];
}
int res=0;
for(int i=0;i<n;i++)//判断正值
{
if(c[i]<=0)
{
res=0;
continue;
}
if(res==0)//当为第一个数
{
ans+=c[i];
res++;
}
else{
if(c[i]>c[i-1])
{
ans+=c[i]-c[i-1];
}
}
}
for(int i=0;i<n;i++)//判断负值
{
if(c[i]>=0)
{
res=0;
continue;
}
if(res==0)//当为第一个数
{
ans+=abs(c[i]);
res++;
}
else{
if(abs(c[i])>abs(c[i-1]))
{
ans+=abs(c[i]-c[i-1]);
}
}
}
cout<<ans;
return 0;
}
总结
此类题经常出现需要注意