画图+建模,从左往右遍历,找后面有几个连续递减的,相等的就不算,直到找到下一个比当前的大的。记录有几个连续递减的,那么当前位就是比200大几个100,因为最后的那一位就是200。然后从右往左也是这样。最后取较大值,因为我们要保证从左往右or从右往左都不会产生矛盾
//判断当前位有几个连续递减的,碰到递增的就break,碰到相等的不要++,最后一个设为200
//每次比前一位少100,如果和前一位相等,就赋值为一样
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> weight(n+1);
vector<int> milk(n+1);
for(int i = 0; i < n; i++){
cin>>weight[i];
}
int cnt = 0;
for(int i = 0; i < n; i++){
cnt = 0;
for(int j = i; j < n-1; j++){
if(weight[j] > weight[j+1]){
cnt++;
}
else if(weight[j] < weight[j+1]){
break;
}
}
milk[i] = cnt*100 + 200;
}
for(int i = n-1; i >= 0; i--){
cnt = 0;
for(int j = i; j > 0; j--){
if(weight[j] > weight[j-1]){
cnt++;
}
else if(weight[j] < weight[j+1]) break;
}
milk[i] = max(cnt*100+200,milk[i]);
}
if(weight[n-1] > weight[n-2]) milk[n-1] = milk[n-2]+100;
int sum = 0;
for(int i = 0; i < n; i++){
sum += milk[i];
cout<<milk[i]<<endl;
}
cout<<sum;
return 0;
}