【道路工程师小卢】CSP题目 C++实现

题目描述

小卢是一名道路工程师,负责铺设一条长度为 n 的道路。铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 n 块首尾相连的区域,一开始,第 i 块区域下陷的深度为 di​。小卢每天可以选择一段连续区间 [L,R],填充这段区间中的每块区域,让其下陷深度减少 1。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 0 。
小卢希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 0。

输入输出格式

输入格式

第一行输入一个整数 n,表示道路的长度。
第二行输入 n 个整数,相邻两数间用一个空格隔开,第 i 个整数为 di​。

输出格式

输出一个整数,即最少需要多少天才能完成任务。

输入输出样例

输入

6
4 3 2 5 3 5

输出

9

说明提示

1≤n≤105
0≤di​≤10000


代码实现:

思路一:不断地去找”数组中连续的非0段“,分析可知这段要修的天数,至少是这段当中的那个最小值,修改数组的值后,继续循环这个过程。】
【这种思路是没有打开的,被题目的描述给带走了(每块区域在填充前下陷深度均不为 0),就想找非0段,认为0是很关键的要素】

#include<iostream>
using namespace std;

int main() {
	int d[100005];
	int n,days=0;

	cin>>n;
	for(int i=0; i<n; i++) {
		cin>>d[i];
	}

	/*找到一个不为0的段*/
	while(1) {
		int left,right,flag=0;
		for(int i=0;i<n;i++){
			if(d[i]!=0){ //左边有了
				left=i;
				flag=1;
				break;
			}
		}
		if(flag==0)break;  //全为0了
		
		int d_min=d[left];
		right=left;
		for(int j=left+1;j<n,d[j]!=0;j++){ //往右捋 
			right++;
			if(d[right]<d_min)d_min=d[right];
		}
		
		for(int k=left;k<=right;k++){
			d[k]-=d_min;
		} 
		
		days+=d_min;
	}
	cout<<days;
	return 0;
}

思路二(贪心):后一块路比前一块浅的话,直接就被顺手填了,没什么影响;要是比前一块深,那需要算一下多深出来多少,多出来的这块是新的工作量,需要累加。】
【这是对问题的另一种角度分析,跳出”连续非0段“这个思维,把0也看作是一种特殊的深度罢了,可能需要慢慢体会~~】

#include<iostream>
using namespace std;

int main() {
	int d[100005];
	int n,days=0;

	cin>>n;
	for(int i=0; i<n; i++) {
		cin>>d[i];
	}
	
	/*贪心,只需要走一遍for循环*/
	days+=d[0];
	
	for(int i=1;i<n;i++){
		if(d[i]>d[i-1]){
			days+=d[i]-d[i-1];
		} 
	}
	cout<<days;
	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSP认证是指各个国家或地区针对信息安全领域的人员进行的认证考试。CSP认证考试的内容主要包括C语言的语法要求,是考察考生在C语言编程方面的理论知识和实际运用能力的考试。C语言作为一种高级编程语言,广泛应用于软件开发、嵌入式系统、操作系统等领域,因此掌握C语言的语法要求对于从事相关工作的人员来说非常重要。 CSP认证中的C语言语法要求主要包括变量的定义与使用、运算符的使用、控制结构的使用、函数的定义与调用等。考生需要熟悉C语言的数据类型、运算符的优先级、条件语句、循环语句等基本语法知识,并能够灵活运用这些知识解决实际问题。 通过CSP认证考试,考生不仅需要掌握基本的C语言语法,还需要了解C语言的一些常用函数库和标准规范,如头文件的使用、库函数的调用等。此外,考生还需要具备良好的编程习惯和调试能力,能够编写出高效、健壮、可读性强的C语言程序。 CSP认证 C语法要求的考试内容比较全面,不仅要求考生掌握C语言的基本语法,还需要了解C语言的进阶知识和应用技巧。通过CSP认证考试取得认证证书对于求职者来说具有较大的竞争优势,也是从事C语言编程工作的必备证书之一。因此,希望有意向的人员能够加强对C语言的学习和理解,提高编程能力,争取在CSP认证考试中取得好成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值