先说说思路:

这题比上一道坑人的wormholes简单多了!我一看到这题,“XXX设计”,还以为要用到什么dp呢,没想到是水题

用两层循环,第一层循环相差17中的上界,第二层遍历所有的山峰计算答案。并不断更新ans。

每座山峰分两种,第一种是大于i需要将它变矮的,第二种是小于i-17需要增加质量的。

相对于上一道题,这道题是PJ组T1,上一道算是TG组D1T2了。

代码很简单,轻松搞定。。

题目简要概述:

给出N个数(1<=N<=100),让你适当改变这些数的大小,使它们中最大数和最小数差不超过17。每改变一个数需要花费改变数量的平方块钱,比如说让这个数增加3要花费9块钱,让这个数减少5要花费25块钱,请输出使它们最大数和最小数差不超过17的最小花费

输入N+1行,第一行一个数N,第2至N+1行一行一个数。输出最小花费。

题目翻译:(用初中英语老师教的那种直译法,语句不通顺别让语文老师揍我来。。)

滑雪课程设计
农民John在他的农场上有N个山丘(1 <= N <= 1000),每一个山丘都有一个在0-100之间的整数的高度。在冬天,自从这里下了大量的雪,农民John一如既往地开启了一个滑雪训练营。
不幸的是,农民John才发现了一个新的税在下一年将要被实施用于滑雪训练营。小心地读完了规则之后,然而,他发现一个滑雪营要求最高和最低的山峰之间的差距被严格限制在17的规定。因此,如果他缩短他的最高的山峰并增加质量来增加他的比较爱的山峰的高度,农民John可以避免支付税收。
如果该边一座山峰x单位的高度花费x^2单位的钱,农民John最少要花多少钱?
农民John只能改变一座山峰的高度一次,所以每座山丘的总花费是它的原始高度和最终高度的差的平方。农民John只想要改变每座山峰的高度一个整数。

程序名:skidesign

输入格式:
第1行:整数N。
第2行至第1+N行:每一行包含一座山丘的高度。

样例输入(文件skidesign.in) :
5
20
4
1
24
21

输入描述:
农民John有五座山丘,海拔高度是1,4,20,21和24。

输出格式:
农民John需要支付来改变他的山峰的高度最小的价钱,所以最高山丘和最低山丘的最小差距是17单位。
第1行:

样例输出(文件skidesign.out):
18

输出描述:
农民John保持高度为4,20和21的山峰的高度。他给高度为1的山峰增加质量,将它变为高度4,(花费=3^2=9)。他将高度为24的山峰缩短为21,同样花费为3^2=9。

/*
ID:aaabbbr1
LANG:C++
TASK:skidesign
*/
#include <stdio.h>
int a[1001],n,ans=0;
int main()
{
freopen("skidesign.in","r",stdin);
freopen("skidesign.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
int ans=10000001;
for(int i=17;i<=100;i++)//keep distance from (i-17) to i
{
int tmp=0;
for(int j=1;j<=n;j++)//calc all the hills
{
if(a[j]<i-17)//it is too low
tmp=tmp+(i-17-a[j])*(i-17-a[j]);
if(a[j]>i)//it is too high
tmp=tmp+(a[j]-i)*(a[j]-i);
}
if(tmp<ans)ans=tmp;
}
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
return 0;
}

  

评测结果:

USER: DONE DONE [aaabbbr1]
TASK: skidesign
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 4176 KB]
   Test 2: TEST OK [0.000 secs, 4176 KB]
   Test 3: TEST OK [0.000 secs, 4176 KB]
   Test 4: TEST OK [0.000 secs, 4176 KB]
   Test 5: TEST OK [0.000 secs, 4176 KB]
   Test 6: TEST OK [0.000 secs, 4176 KB]
   Test 7: TEST OK [0.000 secs, 4176 KB]
   Test 8: TEST OK [0.000 secs, 4176 KB]
   Test 9: TEST OK [0.000 secs, 4176 KB]
   Test 10: TEST OK [0.000 secs, 4176 KB]

All tests OK.

YOUR PROGRAM ('skidesign') WORKED FIRST TIME! That's fantastic
-- and a rare thing. Please accept these special automated
congratulations.

然后下面是测试数据...测试数据太长了...

官方给的“ANALYSIS”代码:(也不难懂,只是i循环的下界)

#include <fstream>

using namespace std;

int n,hills[1000];

int main()
{
ifstream fin("skidesign.in");
fin >> n;
for (int i=0; i<n; i++)
fin >> hills[i];
fin.close(); // brute-force search
// try all elevation intervals from (0,17) to (83,100)
int mincost=1000000000;
for (int i=0; i<=83; i++)
{
// calculate the cost for elevation interval (i,i+17)
int cost=0,x;
for (int j=0; j<n; j++)
{
// if hill is below the interval
if (hills[j]<i)
x=i-hills[j];
// if hill is above the interval
else if (hills[j]>i+17)
x=hills[j]-(i+17);
// if hill is int the interval
else
x=0;
cost+=x*x;
}
// update the minimum cost
mincost=min(mincost,cost);
} ofstream fout("skidesign.out");
fout << mincost << "\n";
fout.close();
}

  

USACO 1.3.6 Ski Course Design[滑雪课程设计]的更多相关文章

  1. 洛谷 P3650 [USACO1.3]滑雪课程设计Ski Course Design

    P3650 [USACO1.3]滑雪课程设计Ski Course Design 题目描述 农民约翰的农场里有N座山峰(1<=N<=1000),每座山都有一个在0到100之间的整数的海拔高度 ...

  2. 【USACO 1.3】Ski Course Design

    n个点(n<=1000)大小范围[0,100],改变一些点的值,使得极差不超过17,代价为改变值的平方. 枚举修改后的最低高度low,维护最小代价. /* TASK: skidesign LAN ...

  3. USACO Section 1.3 Ski Course Design 解题报告

    题目 题目描述 有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17.每座山最多只能改变一次高度,每次改变高度都会产生一定的 ...

  4. [题解]USACO 1.3 Ski Course Design

    Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...

  5. USACO 1.3 Ski Course Design - 暴力

    Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...

  6. USACO 1.3 Ski Course Design

    Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...

  7. USACO 滑雪课程

    #include<cstdio> #include<iostream> using namespace std; int T,S,N,maxd; ],lv[],next[],f ...

  8. 【USACO】滑雪课程

    滑雪课程贝西去科罗拉多州去滑雪,不过还她不太会玩,只是个能力为 1 的渣渣.贝西从 0 时刻进入滑雪场,一到 T 时刻就必须离开.滑雪场里有 N 条斜坡,第 i 条斜坡滑行一次需要 Di 分钟,要求游 ...

  9. 【USACO2009 Open】滑雪课程ski

    [USACO2009 Open]滑雪课程 Ski Lessons Time Limit: 1000 ms Memory Limit: 131072 KBytes Description 约翰请贝西去科 ...

随机推荐

  1. Maven的Snapshot版本与Release版本

    1. Snapshot版本代表不稳定.尚处于开发中的版本 2. Release版本则代表稳定的版本 3. 什么情况下该用SNAPSHOT? 协同开发时,如果A依赖构件B,由于B会更新,B应该使用SNA ...

  2. Cassandra 学习二

    Cassandra的架构 Cassandra的设计目的是处理跨多个节点的大数据工作负载,而没有任何单点故障.Cassandra在其节点之间具有对等分布式系统,并且数据分布在集群中的所有节点之间. 1 ...

  3. git学习5 ecipse集成git(转载)

    原文地址:http://blog.csdn.net/hhhccckkk/article/details/10458159 有的eclipse已经自带了GIt了,就不用安装了 1: 进行安装Git,和安 ...

  4. RVO和NRVO

    返回值优化(Return Value Optimization,简称RVO),是这么一种优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用户返回,那么这个临时对象会消耗一个构造函数(C ...

  5. Python多进程-进程间数据的共享

    不同的进程不能同时修改一份数据,但是不同的进程能对一份数据进行修改 可通过Manager来实现进程间的数据共享 # -*- coding:utf-8 -*- __author__ = "Mu ...

  6. 解决CentOS遇到Qt编译(error: cannot find -lGL)

    笔者CentOS 6.5 64位,安装完成Qt5.5.1.随意新建一个Qt Widgets Application. 结果遇到Qt编译问题,提示信息如下: error: cannot find -lG ...

  7. Python 标准库 -> Pprint 模块 -> 用于打印 Python 数据结构

    使用 pprint 模块 pprint 模块( pretty printer ) 用于打印 Python 数据结构. 当你在命令行下打印特定数据结构时你会发现它很有用(输出格式比较整齐, 便于阅读). ...

  8. DAY7-面向对象之绑定方法与非绑定方法

    一.类中定义的函数分成两大类 一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 类.boud_met ...

  9. 关于android中出现failed to read row 0,column -1错误

    该错误出现的原因是Cursor.getColumnIndex()的参数列名不存在或者错误,这时返回值为-1.出现该错误

  10. HDOJ 1196 Lowest Bit

    题目大意是给一个1-100的整数,要求首先转化成2进制,然后从最低位开始数起到不是0的位停止,输出这些位代表队额10进制数 #include <iostream> using namesp ...