数据量为 1 ~ 1000,所以可以穷举每一种情况。找出最佳方案。
用 l 表示整改后最低的高度,则 l 的范围为 0 ~ 100-17。
遍历 l 的各个情况,算出每种情况的花费,花费最小的即为答案。
//cpp
#include <iostream>
using namespace std;
const int N = 1010;
int a[N];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
int res = 21E8;//最少花费,初值设置一个较大的值
int l = 0;
for(int l = 0; l <= 100 - 17; l++)//穷举每一种情况
{
int money = 0;//该方案的总花费
for(int i = 0; i < n; i++)
{
if(a[i] < l)//比 l 低的山峰需要整改,计算花费
money += (a[i] - l) * (a[i] - l);
else if(a[i] > l + 17) //比 l + 17 高的山峰需要整改,计算花费
money += (a[i] - l - 17) * (a[i] - l - 17);
}
if(money < res)//如果该方案花费小于前面方案,则更新答案
res = money;
}
cout << res;
}
求点赞~
看不懂
海绵宝宝好久不见
哈哈哈哈,卷起来
好贪
雀氏