USACO 1.3.6 Ski Course Design[滑雪课程设计]
先说说思路:
这题比上一道坑人的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[滑雪课程设计]的更多相关文章
- 洛谷 P3650 [USACO1.3]滑雪课程设计Ski Course Design
P3650 [USACO1.3]滑雪课程设计Ski Course Design 题目描述 农民约翰的农场里有N座山峰(1<=N<=1000),每座山都有一个在0到100之间的整数的海拔高度 ...
- 【USACO 1.3】Ski Course Design
n个点(n<=1000)大小范围[0,100],改变一些点的值,使得极差不超过17,代价为改变值的平方. 枚举修改后的最低高度low,维护最小代价. /* TASK: skidesign LAN ...
- USACO Section 1.3 Ski Course Design 解题报告
题目 题目描述 有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17.每座山最多只能改变一次高度,每次改变高度都会产生一定的 ...
- [题解]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 ...
- 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 ...
- 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 ...
- USACO 滑雪课程
#include<cstdio> #include<iostream> using namespace std; int T,S,N,maxd; ],lv[],next[],f ...
- 【USACO】滑雪课程
滑雪课程贝西去科罗拉多州去滑雪,不过还她不太会玩,只是个能力为 1 的渣渣.贝西从 0 时刻进入滑雪场,一到 T 时刻就必须离开.滑雪场里有 N 条斜坡,第 i 条斜坡滑行一次需要 Di 分钟,要求游 ...
- 【USACO2009 Open】滑雪课程ski
[USACO2009 Open]滑雪课程 Ski Lessons Time Limit: 1000 ms Memory Limit: 131072 KBytes Description 约翰请贝西去科 ...
随机推荐
- 开发环境入门 linux基础 (部分) 归档 压缩 Vi编译器 系统分区
归档 压缩 Vi编译器 系统分区 1.使用cat命令进行文件的纵向合并 1) 使用cat命令实现文件的纵向合并: a) 例如:将用户信息数据库文件和组信息数据库文件 ...
- log4j配置文件加载方式
使用背景: apache的log4j是一个功能强大的日志文件,当我们使用eclipse等IDE在项目中配置log4j的时候,需要知道我们的配置文件的加载方式以及如何被加载的. 加载方式: (1).自动 ...
- C#高级参数ref的使用
ref关键字用于将方法内的变量改变后带出方法外.具体我们通过例子来说明: 例子中,将变量n1和n2交换了.如果没有加ref参数,由于没有swadDemo()方法没有返回值,调用后,n1和n2是不会交换 ...
- Tomcat服务器简介
- JavaScript基础笔记集合(转)
JavaScript基础笔记集合 JavaScript基础笔记集合 js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译 js存放的位置 html脚本必须放在&l ...
- [转] php foreach用法和实例
PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误.有两种 ...
- JavaScript问题01 js代码放在header和body的区别
1 body和header中JavaScript执行的时机 1.1 header中 放在header中的javascript代码会进行预加载(即:在页面加载之前就会进行),所以需调用才执行的脚本或事件 ...
- Python 网络爬虫 007 (编程) 通过网站地图爬取目标站点的所有网页
通过网站地图爬取目标站点的所有网页 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 ...
- chrome headless
最近才知道有这么个东西,说白了就是chrome浏览器的命令行模式,一说到命令行自然就和自动化 高效率有关系,感觉对于自动化测试和爬虫很有用啊
- c++线程调用python
c++调用python,底层就似乎fork一个子进程启动一个python的解释器,执行python文件,由于python解释器维护了一个内部状态,所以如果c++程序是多线程,每个线程都调用python ...