题意
给出n个熊猫的体重,它们排成一行,给它们分配牛奶喝,要求最少的牛奶总量。最少的牛奶量是200,每次牛奶增加量是100.邻居熊猫如果体重相同就分配同等量的牛奶,如果体重不同,体重大的熊猫需要喝更多的牛奶
思路
两次扫描,从左向右和从右向左。如果体重在增加,牛奶也增加100,如果体重增加结束,牛奶就从200开始。取两次扫描结果的最大值。
代码
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=10010;
int main(){
int n,milk,weight[maxn],left[maxn],right[maxn],f[maxn],sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&weight[i]);
//从左至右扫描
milk=200;
left[0]=milk;
for(int i=1;i<n;i++){
if(weight[i]<weight[i-1]){
milk=200;
left[i]=milk;
}else if(weight[i]==weight[i-1])
left[i]=milk;
else if(weight[i]>weight[i-1]){
milk+=100;
left[i]=milk;
}
}
//从右至左扫描
milk=200;
right[n-1]=milk;
for(int j=n-2;j>=0;j--){
if(weight[j]<weight[j+1]){
milk=200;
right[j]=milk;
}else if(weight[j]==weight[j+1])
right[j]=milk;
else if(weight[j]>weight[j+1]){
milk+=100;
right[j]=milk;
}
}
for(int i=0;i<n;i++){
f[i]=max(left[i],right[i]);
sum+=f[i];
}
printf("%d",sum);
return 0;
}