题目描述
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?
输入格式
第一行一个 n,表示孩子数。(1≤n≤100)
接下来一行,输入n个孩子的评分 si。(0≤si ≤10)
输出格式
糖果数
样例
Input 1
3
1 0 2
Output 1
5
样例解释
解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。
数据范围
1<=n<=100 1<=孩子的分数<=10
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,a[101],b[101],x=0,m,ans=0;
memset(b,0,sizeof(b));
cin>>n>>a[0];
m=a[0];
for(int i=0;i<n;i++){
cin>>a[i];
if(m>a[i]){
m=a[i];
x=i;
}
}b[x]=1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(b[j]||(!b[j-1]&&!b[j+1]))continue;
if(b[j-1]&&b[j+1]){
if(a[j]==a[j-1])b[j]=b[j-1];
else if(a[j]==a[j+1])b[j]=b[j+1];
else if(a[j]>max(a[j-1],a[j+1])){
if(a[j-1]>a[j+1])b[j]=b[j-1]+1;
else b[j]=b[j+1]+1;
}else if(a[j]<min(a[j-1],a[j+1])){
if(a[j-1]<a[j+1])b[j]=b[j-1]-1;
else b[j]=b[j+1]-1;
}else{
if(a[j-1]<a[j])b[j]=min(b[j-1]+1,b[j+1]-1);
else b[j]=min(b[j-1]-1,b[j+1]+1);
}
}else if(b[j-1]&&!b[j+1]){
if(a[j-1]>a[j])b[j]=b[j-1]-1;
else b[j]=b[j-1]+1;
}else{
if(a[j+1]>a[j])b[j]=b[j+1]+1;
else b[j]=b[j+1]-1;
}
}
}for(int i=0;i<n;i++)ans+=b[i];
cout<<ans;
return 0;
}