P4995 跳跳
泪目了…第一道独立ac的贪心题…不过也是因为这道题简单的原因
- 要求出耗费体力的最大值,则我们要尽可能的保证每次起跳和目标的石头两者绝对值最大
- 然后对石头序列进行升序排序
- 显而易见,从地面跳上最高的石头,也就是最后一块石头,是最优解
- 然后从最高的石头跳向最低的石头,按此规则依次跳向没跳过的石头,ac。
- 为什么要这么跳呢?我们假设,跳上最高的石头后,跳向的不是最低的石头,则这次跳跃不是最优解
- 而下次跳跃跳向没跳过的最高的石头时,也就不是最优解,反证可证明贪心正确。
ac代码:
#include<iostream>
#include<algorithm>
using namespace std;
int a[310];
int main() {
long long n, s = 0;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
s = a[n] * a[n];
for (int i = 1, j = n;i<j;)
{
s += (a[j] - a[i]) * (a[j] - a[i]);
j--;
s += (a[j] - a[i]) * (a[j] - a[i]);
i++;
}
cout << s;
return 0;
}
48

被折叠的 条评论
为什么被折叠?



