您的位置:首页 > 其它

分糖果

2014-12-27 11:12 190 查看
描述
有n个小孩排队问你要糖果,每个小孩都有一个可爱值。你必须给每个小孩至少一个糖果,而且可爱值高的小孩拿的糖果必须比相邻的小孩要多。

注意:如果相邻两人的可爱值相同,则没有限制。

问你总共最少得准备多少糖果。

比如有5个小孩,他们的可爱值分别为3,40,2,1,10.

那么最少的方案应该是1,3,2,1,2,总数为的9

关于输入
第一行一个正整数,n,表示小孩的数量。(n<=100000) 第二行n个正整数,第i整数表示第i个小孩的可爱值(在int范围内)。数之间用一个空格隔开。

关于输出
一个正整数,最少要准备的糖果数。

例子输入
5

3 40 2 1 10

例子输出
9


#include <stdio.h>
#include <stdlib.h>

int main()
{
int n = 0, j;
int *p = 0, *q = 0;
int t = 0;

scanf("%d", &n);
p = (int *)calloc(n, sizeof(int));
q = (int *)calloc(n, sizeof(int));
for (j = 0; j < n; j++)
{
scanf("%d", &p[j]);
}

q[0] = 1;
for (j = 1; j < n; j++)
{
if (p[j] <= p[j - 1])
q[j] = 1;
else
q[j] = q[j - 1] + 1;
}
for (j = n - 2; j >= 0; j--)
{
if (p[j] > p[j + 1] && q[j] <= q[j + 1])
q[j] = q[j + 1] + 1;
}

for (j = 0; j < n; ++j)
{
t += q[j];
}
printf("\n%d\n", t);
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: