作业一——根据成绩计算出至少需要发多少奖金才能让所有的组满意。

简介: 狐进行了一次黑客马拉松大赛,全公司一共分为了N个组,每组一个房间排成一排开始比赛,比赛结束后没有公布成绩,但是每个组能够看到自己相邻的两个组里比自己成绩低的组的成绩,比赛结束之后要发奖金,以1w为单位,每个组都至少会发1w的奖金,另外,如果一个组发现自己的奖金没有高于比自己成绩低的组发的奖金,就会不满意,作为比赛的组织方,根据成绩计算出至少需要发多少奖金才能让所有的组满意。
 
 

输入描述:

 
 

输出描述:

 
 

示例1

输入

 
 

输出

 
 

思路:

1、先给结果数组(用于记录每支队伍的奖金值的数组)赋初值为1.

2、然后从左往右遍历队伍,如果后面的比前面的成绩好,则将该队伍的值修改为前一个队伍的奖金值+1;

3、然后从后往前遍历,如果后一个比前一个的分值低,但是奖金高,则将前一个队伍的奖金值改为后一个队伍的奖金+1.

4、遍历记录奖金的数组,获取奖金总额。

#include<iostream>
#include<vector>
using namespace std;

int minMoney(vector<int> teams){
	if(teams.size()<=0) return 0;
	
	vector<int>money(teams.size(),1);
	int sum=0;
	for(int i=1; i<teams.size(); i++){
		if(teams[i]>teams[i-1]) 
			money[i]=money[i-1]+1;
	}

	for(int i=teams.size()-1;i>=0;i--){
		if(teams[i]<teams[i-1]){
			if(money[i]>=money[i-1])
				money[i-1]=money[i]+1;
		}
	}
    
	for(int i=0; i<teams.size(); i++)
		sum+=money[i];
    
	return sum;
}

int main(){
	int N=0, temp=0;
	vector<int>teams;
	cin>>N;
	while(N--){
		cin>>temp;
		teams.push_back(temp);
	}

	int answer=minMoney(teams);
    cout<<answer;
	return 0;
}

 

 

相关文章
|
Web App开发 人工智能 开发者
【创意坊】探秘 GitHub 惊艳开源项目!
【创意坊】探秘 GitHub 惊艳开源项目!
250 0
|
Linux
Linux命令(89)之xargs
Linux命令(89)之xargs
172 1
|
机器学习/深度学习 人工智能 算法
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
424 0
|
监控 NoSQL MongoDB
MongoDB数据库的索引管理技巧
【8月更文挑战第20天】MongoDB数据库的索引管理技巧
264 1
|
11月前
|
人工智能 前端开发 Linux
github是怎么用的,如何下载仓库
github是怎么用的,如何下载仓库
|
11月前
|
网络协议 程序员
为什么TCP需要三次握手?一文讲透!
TCP三次握手是TCP协议建立连接的关键步骤,确保客户端和服务端同步状态并确认彼此的存在。过程分为三步:1) 客户端发送SYN包请求连接;2) 服务端回应SYN/ACK包确认收到并提供初始序列号;3) 客户端发送ACK包确认服务端的序列号,双方进入连接状态。此机制确保了双向通信的可靠性和资源的有效利用,避免了失效请求导致的问题。
|
存储 算法 编译器
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
434 0
|
测试技术 Python
解锁Python魔法!装饰器:让你的代码翩翩起舞,简化繁琐逻辑,让编程成为一场戏剧性的华丽变身!
【8月更文挑战第21天】在Python编程中,当需要为函数添加如日志记录、性能测试等功能时,手动重复编写相同代码既冗长又难维护。装饰器提供了解决方案:它是一种特殊函数,包裹目标函数以添加额外功能,而不改变原函数结构。装饰器增强了代码复用性、解耦及灵活性。例如,可通过装饰器轻松记录函数执行时间。更高级用法包括带参数的装饰器、多层装饰器以及使用类作为装饰器。掌握装饰器能显著提升Python代码的质量和效率。
133 5
|
SQL Java Unix
Android经典面试题之Java中获取时间戳的方式有哪些?有什么区别?
在Java中获取时间戳有多种方式,包括`System.currentTimeMillis()`(毫秒级,适用于日志和计时)、`System.nanoTime()`(纳秒级,高精度计时)、`Instant.now().toEpochMilli()`(毫秒级,ISO-8601标准)和`Instant.now().getEpochSecond()`(秒级)。`Timestamp.valueOf(LocalDateTime.now()).getTime()`适用于数据库操作。选择方法取决于精度、用途和时间起点的需求。
314 3
|
SQL XML Java
Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
317 0