• 2021寒假每日一题《滑雪场设计》


    棋盘挑战

    题目来源:USACO 2014 January Contest Bronze
    时间限制:(1000ms) 内存限制:(64mb)

    题目描述

    农夫约翰的农场上有 (N) 个山丘,每座山的高度都是整数。
    在冬天,约翰经常在这些山上举办滑雪训练营。
    不幸的是,从明年开始,国家将实行一个关于滑雪场的新税法。
    如果滑雪场的最高峰与最低峰的高度差大于17,国家就要收税。
    为了避免纳税,约翰决定对这些山峰的高度进行修整。
    已知,增加或减少一座山峰 (x) 单位的高度,需要花费 (x^2) 的金钱。
    约翰 只愿意改变整数单位 的高度。
    请问,约翰最少需要花费多少钱,才能够使得最高峰与最低峰的高度差不大于17。

    输入格式

    第一行包含整数 (N)
    接下来 (N) 行,每行包含一个整数,表示一座山的高度。

    输出格式

    输出一个整数,表示最少花费的金钱。

    数据范围

    (1 ≤ N ≤ 1000)
    数据保证,每座山的初始高度都在 (0∼100) 之间。

    样例输入

    5
    20
    4
    1
    24
    21
    

    样例输出

    18
    

    样例解释

    最佳方案为,将高度为 (1) 的山峰,增加 (3) 个单位高度,将高度为 (24) 的山峰,减少 (3) 个单位高度。

    解题思路:枚举

    拿到给定的山高度的数组之后,
    因为每座山的初始高度都在 (0∼100) 之间。
    所以设置一个山的最小标准 (i) ,从 (0) 开始,到 (100-17) 之间,也就是 (i in [0,83))
    (i) 设置为一个最小标准,所有山比最小标准矮的,进行增高,
    (i+17) 设置为最大标准,所有山比最大标准高的,将其变矮。

    枚举所有情况,取花费最小的一项,即得题解。

    解题代码-Java

    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int n = input.nextInt();
            int[] mountains = new int[n];
            for (int i = 0; i < n; i++) {
                mountains[i] = input.nextInt();
            }
            input.close();
            int ans = Integer.MAX_VALUE;  //给答案赋一个很大的初始值
            for (int i = 0; i < 100 - 17; i++) {  //以 [i,i+17] 为山的高度区间,枚举所有可能
                int w = 0;
                for (int j = 0; j < n; j++) {
                    if (mountains[j] < i) {  //若山的高度不在区间内,则计算需要花费的金钱
                        w += Math.pow(mountains[j] - i, 2);
                    } else if (mountains[j] > i + 17) {
                        w += Math.pow(mountains[j] - i - 17, 2);
                    }
                }
                ans = Math.min(ans, w);  //枚举所有的情况,取花费金钱最小的值作为答案。
            }
            System.out.println(ans);
        }
    }
    
  • 相关阅读:
    centos7下如何使用udev配置asm磁盘
    ORA-29786: SIHA attribute GET failed with error [Attribute 'SPFILE' sts[200]
    安装grid时报INS-40404错误
    clickhouse编译安装
    centos7通过rc.local文件添加自启动服务
    Error in invoking target 'agent nmhs' of makefile
    打补丁(18370031)
    2020 HFCTF
    2020省赛决赛
    2020西湖论剑
  • 原文地址:https://www.cnblogs.com/hurentian/p/14325593.html
Copyright © 2020-2023  润新知