P3650 [USACO1.3]滑雪課程設計Ski Course Design
阿新 • • 發佈:2018-12-22
題目描述
農民約翰的農場裡有N座山峰(1<=N<=1000),每座山都有一個在0到100之間的整數的海拔高度。在冬天,因為山上有豐富的積雪,約翰經常開辦滑雪訓練營。
不幸的是,約翰剛剛得知稅法在滑雪訓練營方面有新變化,明年開始實施。在仔細閱讀法律後,他發現如果滑雪訓練營的最高和最低的山峰海拔高度差大於17就要收稅。因此,如果他改變山峰的高度(使最高與最低的山峰海拔高度差不超過17),約翰可以避免支付稅收。
如果改變一座山x單位的高度成本是x^2單位,約翰最少需要付多少錢?約翰只願意改變整數單位的高度。
輸入輸出格式
輸入格式:
第一行:一個整數n
第二行到N+1行:每行是一座山的海拔高度
輸出格式:
約翰需要支付修改山海拔高度的總金額,最高和最低的山峰間高度差最多17。
列舉最小值到最大值,高於削去,低於補上,min比較答案
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #define N 1000+7 using namespace std; inline int sqr(int x) { return x*x; } int n,ma=0,mi=1000+7; int aans=200000000+9,ans; int a[N]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); ma=max(ma,a[i]); mi=min(mi,a[i]); } for(int j=mi;j<=ma;j++) { ans=0; for(int i=1;i<=n;i++) { if(a[i]-17>j)ans+=sqr(a[i]-j-17); else if(j>a[i])ans+=sqr(a[i]-j); } aans=min(aans,ans); } printf("%d",aans); }
輸入輸出樣例
輸入樣例#1: 複製
5 20 4 1 24 21
輸出樣例#1: 複製
18
說明
約翰保持高度為4、20和21的山的高度。他增高高度為1的山、變成高度4(花費 3 ^ 2 = 9)。他降低了高度為24的山變成高度21也花費3 ^ 2 = 9。