原題鏈結
考察:列舉
錯誤思路:
第一想法是兩個對頂堆維護最大值和最小值,但是遇到這樣的 0 2 21 0 19 的資料會出錯.原因是當第一次修改a[n]與a[1]符合距離17後,與a[2]不一定符合距離17,但是題目約定只能修改一次a2+b2
<= (a+b)2這樣會使得結果小了.同理每次sort也一樣.
正確思路:
最大值最小值相差不超過17,換言之就是每座山都在長度17的區間內.0~100有84個長度17的區間,列舉每個區間,如果山在區間內就不修改,不在就修改.
此思路涉及證明:為什麼所有山修改後在0~100區間內:
情況一:所有山都不在0~100的區間內.假設最優解所有山都<0,在起初時所有山都是》0的,花費是兩點距離的平方.但是如果我們把所有山的高度都修改為0,此方案也為合法方案,且距離比假設的最優解小.因此不可能全在0~100的區間內.
情況二:部分山不在0~100的區間內.同理將這些不在區間內的山修改為0||100,可以發現花費也比最優解小.因此所有最優解都在0~100的範圍內.
1 #include 2 #include 3 #include 4 #include 5using
namespace
std;
6const
int n = 1010,inf = 0x3f3f3f3f;7
inta[n];
8int
main()
923 ans =min(sum,ans);24}
25 printf("
%d\n
",ans);
26return0;
27 }
AcWing 1353 滑雪場設計
農夫約翰的農場上有 n 個山丘,每座山的高度都是整數。在冬天,約翰經常在這些山上舉辦滑雪訓練營。不幸的是,從明年開始,國家將實行乙個關於滑雪場的新稅法。如果滑雪場的最高峰與最低峰的高度差大於17,國家就要收稅。為了避免納稅,約翰決定對這些山峰的高度進行修整。已知,增加或減少一座山峰 x 單位的高度,...
AcWing 1353 滑雪場設計
農夫約翰的農場上有 n 個山丘,每座山的高度都是整數。在冬天,約翰經常在這些山上舉辦滑雪訓練營。不幸的是,從明年開始,國家將實行乙個關於滑雪場的新稅法。如果滑雪場的最高峰與最低峰的高度差大於17,國家就要收稅。為了避免納稅,約翰決定對這些山峰的高度進行修整。已知,增加或減少一座山峰 x 單位的高度,...
acwing1353滑雪場設計
通讀題目,找出一些性質 1.正確區間一定在0 100之間,證明過程如下 反證法 假設存在正確區間端點不在範圍內,由於區間點變換前所有點都在 0,100 那麼我可以將範圍外的點移動到端點0處,由於先前的點都在範圍內,因此移動的步數肯定更少,那麼這個區間就不是代價最少的,和題設矛盾。2.確定了區間,我們...