典型網(wǎng)站建設(shè)百度應(yīng)用市場
【題目來源】
https://www.luogu.com.cn/problem/P4995
【題目描述】
你是一只小跳蛙,你特別擅長在各種地方跳來跳去。
這一天,你和朋友小 F 一起出去玩耍的時候,遇到了一堆高矮不同的石頭,其中第 i 塊的石頭高度為 hi,地面的高度是 h0=0。你估計著,從第 i 塊石頭跳到第 j 塊石頭上耗費的體力值為 (hi-hj)^2,從地面跳到第 i 塊石頭耗費的體力值是 (hi)^2。
為了給小 F 展現(xiàn)你超級跳的本領(lǐng),你決定跳到每個石頭上各一次,并最終停在任意一塊石頭上,并且小跳蛙想耗費盡可能多的體力值。
當(dāng)然,你只是一只小跳蛙,你只會跳,不知道怎么跳才能讓本領(lǐng)更充分地展現(xiàn)。
不過你有救啦!小 F 給你遞來了一個寫著 AK 的電腦,你可以使用計算機程序幫你解決這個問題,萬能的計算機會告訴你怎么跳。
那就請你——會寫代碼的小跳蛙——寫下這個程序,為你 NOIP AK 踏出堅實的一步吧!
【輸入格式】
輸入一行一個正整數(shù) n,表示石頭個數(shù)。
輸入第二行 n 個正整數(shù),表示第 i 塊石頭的高度 hi。
【輸出格式】
輸出一行一個正整數(shù),表示你可以耗費的體力值的最大值。
【輸入樣例1】
2
2 1
【輸出樣例1】
5
【輸入樣例2】
3
6 3 5
【輸出樣例2】
49
【數(shù)據(jù)范圍】
對于 1≤i≤n,有 0<hi≤10^4,且保證 hi 互不相同。
對于 10% 的數(shù)據(jù),n≤3;
對于 20% 的數(shù)據(jù),n≤10;
對于 50% 的數(shù)據(jù),n≤20;
對于 80% 的數(shù)據(jù),n≤50;
對于 100% 的數(shù)據(jù),n≤300。
【算法分析】
本題思路就是排序后貪心:對于數(shù)量任意的柱子,應(yīng)從先從地面跳到最高柱子,再跳到最低柱子,再跳到次高柱子……依次類推。
本質(zhì)上,是讓小青蛙每次跳到和自己當(dāng)前位置高度差最大的柱子上。
【算法代碼】
#include <bits/stdc++.h>
using namespace std;const int maxn=305;
long long h[maxn];
long long ans;int main() {int n;cin>>n;for(int i=1; i<=n; i++) cin>>h[i];sort(h,h+n+1);int le=0,ri=n;while(le<ri) {ans+=pow(h[ri]-h[le],2);le++;ans+=pow(h[ri]-h[le],2);ri--;}cout<<ans<<endl;return 0;
}/*
in:
3
6 3 5out:
49
*/
【參考文獻(xiàn)】
https://www.luogu.com.cn/problem/solution/P4995
?