首页 > 试题广场 >

搬水果

[编程题]搬水果
  • 热度指数:10497 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成一堆了。小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。     假定每个水果重量都为 1,并且已知水果的种类数和每种水果的数目,你的任务是设计出合并的次序方案,使小明耗费的体力最少,并输出这个最小的体力耗费值。例如有 3 种水果,数目依次为 1,2,9。可以先将 1,2 堆合并,新堆数目为3,耗费体力为 3。然后将新堆与原先的第三堆合并得到新的堆,耗费体力为 12。所以小明总共耗费体力=3+12=15,可以证明 15 为最小的体力耗费值。

输入描述:
    每组数据输入包括两行,第一行是一个整数 n(1<=n<=10000),表示水果的种类数。第二行包含 n 个整数,用空格分隔,第 i 个整数(1<=ai<=1000)是第 i 种水果的数目。


输出描述:
对于每组输入,输出一个整数并换行,这个值也就是最小的体力耗费值。输入数据保证这个值小于 2^31。
示例1

输入

3
9 1 2
0

输出

15
头像 用户抉择
发表于 2021-03-29 21:15:40
#include <iostream> #include <queue> using namespace std; int main() {     int n,ans,a,b 展开全文
头像 在考古的小鱼干很有气魄
发表于 2023-03-12 10:59:06
#include <bits/stdc++.h> #define MAX 10000 using namespace std; int main(){ int n,data[MAX]; while(cin>>n){ if(n == 0) break; 展开全文
头像 L456
发表于 2024-03-19 21:41:59
#include <bits/stdc++.h> using namespace std; int main() { int n,m; while(cin>>n) { if(!n) break; priority_queue<int,vector< 展开全文
头像 ruuioche
发表于 2024-01-20 00:19:31
#include <stdio.h> #include <stdlib.h> /*根据下面注释的失败思路进行改进 上面思路失败的点在于把每次合并后的最小堆考虑成了各个种类里面的最小堆 只需要想办法维护一个每次都能输出最小两个堆的存储结构即可 对于C++来说可以采用优先队列 对 展开全文
头像 牛客440904392号
发表于 2024-10-03 13:37:00
#include<iostream> #include<queue> using namespace std; int main() { int n; while (cin >> n) { if (n == 0) break; 展开全文
头像 牛客568792594号
发表于 2024-03-04 17:25:37
#include <bits/stdc++.h> using namespace std; int main(){ int n; while (cin >> n){ if (n == 0){ break; } priority_queue< 展开全文
头像 牛客567628359号
发表于 2023-03-25 17:13:50
#include <iostream> #include <queue> #include <unordered_map> using namespace std; int main() { int n; while (cin >> 展开全文
头像 TomatoHead
发表于 2024-03-20 19:18:52
#include <bits/stdc++.h> using namespace std; int main() { int n,m; priority_queue<int> Myqueue; scanf("%d",&n) 展开全文
头像 Coming680
发表于 2022-02-10 15:35:04
优先队列简单运用 #include<iostream> #include<queue> using namespace std; int main() { int n,num; priority_queue<int,vector<int>,g 展开全文
头像 笑川不吃香菜
发表于 2024-03-16 15:20:09
#include <bits/stdc++.h> using namespace std; int main() { int n; while(cin>>n){ if(n==0)return 0; priority_queue& 展开全文