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下面的df命令
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
- maven 学习 十 关于打包
clean package -Dmaven.test.skip=true -P product 这个命令干的活: 清class文件,打包构建,跳过测试,注意最后一个 -P product, 会激活项目 ...
- Dev控件GridControl实现CheckBox列和ComBox列
1.在sql语句中添加空白行,如select c1,c2 null c3 from xxx; 2.将sql语句查询结果与gdc绑定CmmFrm.BestFitGridViewColumnsWidth( ...
- 2016.4.6 WinForm显示PDF两种方法
1.最直接的方法,添加webbrowser控件 webb.Url = new Uri(path);可显示pdf控件. 如果需要在打开时跳转到某页,可用在路径后直接加#page=,例如webb.Url ...
- Linux 对mysql远程授权连接操作 和 查看mysql数据库和表 基本命令
Linux 对mysql远程连接的授权操作 首先linux连接mysql数据库 授权: grant all on *.* to ' with grant option; //允许账户root从任何主机 ...
- 11-02SQLserver基础--字符串函数
数据库の函数 一.内置函数--字符串函数 1.--ASCII 返回字符串的首字母的ASCII编码 select ASCII('ame') select ASCII(xingming)from xues ...
- 部署和调优 2.4 tomcat安装
下载tamcet 官网 http://tomcat.apache.org/ 左侧选择版本 复制下载链接 切换到下载目录 cd /usr/local/src linux wget wget http:/ ...
- [Python Study Notes]一个简单的区块链结构(python 2.7)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- 一个小错误,在for循环中,每次repaint()的时候,记得先把frame涂成白色的。等于擦掉原来的痕迹·。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Animate { int x=1; in ...
- c++正确处理 is-a has-a关系
比如.我们想实现一个Set类,而已经有一个List类可提供给你使用,我们到底用is-a(public继承)关系还是用has-a(组合)关系呢? 1:如果使用is-a关系,则 class Set:pub ...