程序员节发橙子

每年的 1024 程序员节日,黑马程序员都会举办大型的庆祝活动。今年的程序员节也不例外,每个班级的同学都发了橙子。

班级里有 n名同学从前到后排成一排,且已经得知了这些同学的成绩,其中第 i名同学的成绩是 a_i


。班主任想根据同学们上个阶段的考试成绩来评定发橙子的数量。为了激励成绩优秀同学,发橙子时需要满足如下要求:

相邻同学中成绩好的同学的橙子必须更多。若相邻的同学成绩一样,则它们分到的数量必须平等。
每个同学至少分配一个橙子
由于预算有限,班主任希望在符合要求的情况下发出尽可能少的橙子。请问,至少需要准备多少橙子呢?

输入格式
第一行是一个整数 n,表示学生数量。

接下来一行有 n个整数,第 i 个整数 a_i


,表示第 i个同学的成绩。

输出格式
输出答案,也就是需要最少准备多少个橙子。

输入输出样例

输入
5
3 4 5 4 3
输出
9
说明/提示
样例 1 解释
每位同学拿到的橙子的数量分别是 1,2,3,2,11,2,3,2,1,所以至少需要准备 9 个。
思路;
先给每个人都发一个橘子,然后先正着找出所有的不降子序列,再按照这个序列从低分到高分依次每个人多分发一个橘子(相同得分,分到橘子相同),再反着找出所有不降子序列,高分的要比地分的橘子多,否则分高的再发一个橘子
源代码

n=int(input())
lis1=list(map(int,input().split()))
lis2=[]
for i in range(1,n+1):#每人发一个橘子
    lis2.append(1)
for i in range(1,n):#正着求不降子序列
    if(lis1[i]>lis1[i-1]):#给橘子数赋值
        lis2[i]=lis2[i-1]+1
    if(lis1[i]==lis1[i-1]):
        lis2[i] = lis2[i-1]#分数相同则与上个人相等
for i in range(n-1,0,-1):#反着求不降子序列
    if(lis1[i-1]>lis1[i]):
        lis2[i-1]=max(lis2[i-1],lis2[i]+1)
    if (lis1[i-1] == lis1[i]):
        lis2[i-1] = lis2[i]
a=sum(lis2)
print(a)

这里用的是python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值