zoukankan      html  css  js  c++  java
  • USACO Section 1.3 Ski Course Design 解题报告

    题目

    题目描述

    有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17。每座山最多只能改变一次高度,每次改变高度都会产生一定的费用,如果改变了X高度,那么将会产生X^2的费用,现在需要计算最少需要支付的金额。

    数据范围

    1 <= N <= 1000,每座山的高度在0~100之间的一个整数,改变前后山的高度都是整数。

    样例输入

    首先输入一个N,代表有N座山,下面N行数字代表每座山的高度

    5
    20
    4
    1
    24
    21
    

    样例输出

    18

    解题思路

    首先找到最高的山与最低的山,最终的最优结果肯定是改变之后最矮的山的高度位于最大值与最小值之间,利用这个思路,直接枚举最大值与最小值之间的所有的高度h,然后使所有的山的高度都位于区间[h, h+17],最终选一个最小代价方案。时间复杂度为O(100 * 1000)

    解题代码

    /*
    ID: yinzong2
    PROG: skidesign
    LANG: C++11
    */
    #define MARK
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int MAXN = 1000+10;
    const int INF = 0x3fffffff;
    
    int hills[MAXN];
    int n;
    
    int main() {
    #ifdef MARK
        freopen("skidesign.in", "r", stdin);
        freopen("skidesign.out", "w", stdout);
    #endif // MARK
        while(~scanf("%d", &n)) {
            int _min = INF, _max = 0;
            for(int i = 0; i < n; i++) {
                scanf("%d", &hills[i]);
                _min = min(_min, hills[i]);
                _max = max(_max, hills[i]);
            }
            int l,r;
            int ans = INF;
            for(int i = _min; i <= _max; i++) {
                l = i;
                r = i+17;
                int sum = 0;
                for(int j = 0; j < n; j++) {
                    if(hills[j] < l) {
                        sum += ((l-hills[j])*(l-hills[j]));
                    }
                    if(hills[j] > r) {
                        sum += ((hills[j]-r)*(hills[j]-r));
                    }
                }
                ans = min(ans, sum);
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    Web Workers 的基本信息
    关于前端框架的一些观点
    解密jQuery内核 DOM操作方法(二)html,text,val
    解密jQuery内核 DOM操作
    解密jQuery内核 DOM操作的核心buildFragment
    解密jQuery内核 DOM操作的核心函数domManip
    前端MVC框架Backbone 1.1.0源码分析(二)
    前端MVC框架Backbone 1.1.0源码分析(一)
    解密jQuery内核 Sizzle引擎筛选器
    解密jQuery事件核心
  • 原文地址:https://www.cnblogs.com/yinzm/p/5935249.html
Copyright © 2011-2022 走看看