第一种方法:排序
1.从小到大排序,‘
2.头两个相加赋值到第二个,
3.再排序(或优化为往后比较赋值);
4. 循环2.3.
const int maxn = 1001;
int fruit[maxn], n;
void create(int n)
{
for (int i = 1; i <= n; i++)
{
cin >> fruit[i];
}
}
int main()
{
int j, temp,sum=0;
cin >> n;
create(n);
sort(fruit, fruit + n+1);
for (int i = 2; i <= n; i++)
{
fruit[i] += fruit[i-1];
sum += fruit[i];
j = i;
temp = fruit[i];
while (fruit[j + 1] < temp && j + 1 <= n) {
fruit[j] = fruit[j + 1];
++j;
}
fruit[j] = temp;
}
cout << sum << endl;
}
方法二:使用堆
调整堆::向下调整:j=i*2是儿子。while(j<=high)
添加元素:向上调整: