USACO Section1.3 Ski Course Design 解题报告
2015-03-09 12:47
483 查看
skidesign解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
N座山,每座山高度是0到100的整数。我们要调整山高,让最高的山和最低的山高度差不超过17。
将一座山的高度调整x,花费是x²。注意,本题只允许山高改变整数值。
【数据范围】
1<=N<=1000
【输入样例】
5
20
4
1
24
21
【输出样例】
18
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
这道题,关键在于想到怎么做,之后就毫无难度了。
让山高的最大值与最小值差不大于17。如果你想着如何去逐步调整,那就复杂了,很难搞。
但其实,可以换个思路,一步到位:将所有山高都调整到[l,r]的范围内,其中l+17==r。这很容易,只要将[0,l-1]的山变成l,[r+1,100]的山变成r即可,时间是线性的。而[l,r]的所有情况一共是大约100-17组,也是线性的。如此,便可在O(N²)内解决问题,其中N≈100-17。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
一遍AC。
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
N座山,每座山高度是0到100的整数。我们要调整山高,让最高的山和最低的山高度差不超过17。
将一座山的高度调整x,花费是x²。注意,本题只允许山高改变整数值。
【数据范围】
1<=N<=1000
【输入样例】
5
20
4
1
24
21
【输出样例】
18
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
这道题,关键在于想到怎么做,之后就毫无难度了。
让山高的最大值与最小值差不大于17。如果你想着如何去逐步调整,那就复杂了,很难搞。
但其实,可以换个思路,一步到位:将所有山高都调整到[l,r]的范围内,其中l+17==r。这很容易,只要将[0,l-1]的山变成l,[r+1,100]的山变成r即可,时间是线性的。而[l,r]的所有情况一共是大约100-17组,也是线性的。如此,便可在O(N²)内解决问题,其中N≈100-17。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
一遍AC。
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
/* ID: icedrea1 PROB: skidesign LANG: C++ */ #include <iostream> #include <fstream> using namespace std; const int maxInt = (1<<31)-1; int n,d[101]; int js(int l,int r) { int cost=0; for(int i=0;i<=l;++i) cost+=(l-i)*(l-i)*d[i]; for(int j=r;j<=100;++j) cost+=(j-r)*(j-r)*d[j]; return cost; } void change(int &r,int x) { if(x<r) r=x; } int main() { ifstream in("skidesign.in"); ofstream out("skidesign.out"); in>>n; for(int i=1,x;i<=n;++i) { in>>x; ++d[x]; } int cost=maxInt; for(int l=0,r;l<=100-17;++l) { r=l+17; change(cost,js(l,r)); } out<<cost<<endl; in.close(); out.close(); return 0; }
相关文章推荐
- USACO Section 1.3 Ski Course Design 解题报告
- USACO-Section 1.3 Ski Course Design(枚举)
- USACO Section 1.3 Ski Course Design
- USACO-Section1.3 Ski Course Design [模拟]
- USACO Section 1.3 Ski Course Design
- USACO - Chapter1 Section 1.3 - Ski Course Design
- USACO-Section 1.3 Ski Course Design
- USACO-Section1.3 Ski Course Design
- USACO Ski Course Design 解题报告
- USACO-Section1.3 Ski Course Design【暴力枚举】
- USACO-Section1.3 Ski Course Design
- USACO-Section 1.3 Ski Course Design Lock[...]
- USACO section 1.3 Ski Course Design
- USACO 1.3 Ski Course Design
- USACO 1.3 Ski Course Design (枚举)
- USACO 1.3 Ski Course Design
- USACO Ski Course Design 解题日志
- USCAO-Section 1.3 Ski Course Design
- USACO 1.3 Ski Course Design___枚举
- 【[usaco1.3] 滑雪课程设计 Ski Course Design 】【枚举】