洛谷 P5019 铺设道路 Java

贪心
使用数组 f[i] : 来表示铺平前i块需要的最短的天数

遍历所有的土地:
a[i+1] <= a[i]时,f[i+1] = f[i],后边的区域比前边的小,则后边的区域可以趁着前边铺的时候铺平。
a[i+1] > a[i]时,f[i+1] = f[i] + (a[i+1] - a[i]),后边的区域比前边的大,则需要先铺平前边(f[i]),再铺平后边比他前边那一个多出的部分(a[i+1] - a[i])

import java.util.*;
class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();   
        int res = 0;
        int[] f = new int[n+1];
        int[] a = new int[n+1];
        for(int i = 1 ; i <= n ; i++)
        {
            a[i] = sc.nextInt();
        }
        f[1] = a[1];
        for(int i = 1 ; i < n ; i++)
        {
            if(a[i+1] <= a[i])
            {
                f[i+1] = f[i];
            }else
            {
                f[i+1] = f[i] + (a[i+1]-a[i]);
            }
        }
        System.out.println(f[n]);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45260619/article/details/105676792