Problem:
Score : 300 points

Problem Statement

In a flower bed, there are N flowers, numbered 1,2,......,N. Initially, the heights of all flowers are 0.
You are given a sequence h=\{h_1,h_2,h_3,......\} as input. You would like to change the height of Flower k to h_k for all k (1 \leq k \leq N), by repeating the following "watering" operation:

Specify integers l and r. Increase the height of Flower x by 1 for all x such that l \leq x \leq r.

Find the minimum number of watering operations required to satisfy the condition.

Constraints

1 \leq N \leq 100

0 \leq h_i \leq 100

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
h_1 h_2 h_3 ...... h_N

Output

Print the minimum number of watering operations required to satisfy the condition.

Sample Input 1

4
1 2 2 1

Sample Output 1

2

The minimum number of watering operations required is 2.
One way to achieve it is:

Perform the operation with (l,r)=(1,3).

Perform the operation with (l,r)=(2,4).

Sample Input 2

5
3 1 2 3 1

Sample Output 2

5

Sample Input 3

8
4 23 75 0 23 96 50 100

Sample Output 3

221

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;

namespace AtCoder
{
    class Program
    {
        static int n;
        static int[] h;
        static int[] flowers;
        static int count;

        static void Main(string[] args)
        {
            //[summary]C - Grand Garden
            n = int.Parse(Console.ReadLine());

            //目標とする花の高さ
            h = ReadLine().ToArray();

            flowers = new int[n];
            count = 0;

            while (true)
            {
                int firstIndex = 0;

                //水をやる花のカウントが始まっているかどうかのフラグ
                bool isStarted = false;

                for (int i = 0; i < n; i++)
                {
                    if (flowers[i] < h[i])
                    {
                        //カウントが始まっていなかったらスタート
                        if (!isStarted)
                        {
                            //最後の1本だけに水をやるケース
                            if (i == n - 1)
                            {
                                WaterFlower(i, i);
                            }
                            else
                            {
                                firstIndex = i;
                                isStarted = true;
                            }                            
                        }
                        else
                        {
                            //最後の花まで来たら、水をやる
                            if (i == n - 1)
                            {
                                WaterFlower(firstIndex, i);
                            }
                        }
                    }
                    else
                    {
                        //成長し切った花があったらカウントを止める
                        if (isStarted)
                        {
                            WaterFlower(firstIndex, i - 1);
                            isStarted = false;
                        }
                    }
                }

                if (IsCompleted())
                {
                    Console.WriteLine(count);
                    return;
                }
            }
        }

        static void WaterFlower(int firstIndex, int lastIndex)
        {
            //水やり開始
            for (int i = firstIndex; i <= lastIndex; i++)
            {
                flowers[i]++;
            }

            count++;
        }

        static bool IsCompleted()
        {
            for(int i = 0; i < n; i++)
            {
                if (flowers[i] != h[i])
                {
                    return false;
                }
            }

            return true;
        }

        static List<int> ReadLine()
        {
            var line = Console.ReadLine().TrimEnd();
            var array = line.Split(' ');
            var numbers = new List<int>();

            foreach (var s in array)
            {
                int num = int.Parse(s);
                numbers.Add(num);
            }

            return numbers;
        }
    }
}