老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:
每个孩子至少分配到1个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?
代码如下:
#include<iostream>
#include<vector>
using namespace std;
int fappen(vector<int> &vec)
{
int n = vec.size();
if (0 >= n) return 0;
vector<int> left(n);
vector<int> right(n);
for (int i = 1; i <= n - 1; ++i)
{
if (vec[i] > vec[i - 1])
{
left[i] =left[i-1]+1;
}
}
for (int i = n - 2; i >= 0; --i)
{
if (vec[i] > vec[i + 1])
{
right[i] =right[i+1]+1;
}
}
int count = 0;
for (int i = 0; i < n; ++i)
{
if (left[i] > right[i])
{
count += left[i];
}
else
{
count += right[i];
}
}
return count + n;
}
int main()
{
vector<int> vec;
int ar[] = { 1,3,2,2,1 };
int n = sizeof(ar) / sizeof(ar[0]);
vec.insert(vec.begin(), ar, ar + n);
int mink = fappen(vec);
cout << mink << endl;
return 0;
}