C++并且不使用VECTOR头文件完成:唐僧师徒四人准备去卖苹果换盘缠现在已经打包成了许多袋。孙悟空决定让猪八戒把所有的苹果合成一袋。 每一次合并八戒可以把两袋苹果合并到一起消耗的体力等于两袋苹果的重量之和。可以看出所有的苹果经过 n-1 次合并之后就只剩下一袋了。八戒在合并苹果时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些苹果搬到集市所以八戒在合并苹果时要尽可能地节省体力。你
这个问题可以使用贪心算法解决。贪心算法的思路是每次选择两袋苹果数目最小的两袋进行合并,然后将合并后的袋子放回袋子序列中,重复这个过程直到只剩下一袋苹果。
具体实现步骤如下:
-
读取输入的袋子数目n和每袋苹果数目的数组a。
-
将数组a按照从小到大的顺序排序。
-
初始化总体力耗费值为0。
-
循环n-1次,每次选择数目最小的两袋苹果进行合并,并将合并后的袋子放回袋子序列中,更新总体力耗费值。
-
输出总体力耗费值。
下面是C++的实现代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
int totalCost = 0;
for (int i = 0; i < n-1; i++) {
int cost = a[i] + a[i+1];
totalCost += cost;
a[i+1] = cost;
}
cout << totalCost << endl;
return 0;
}
通过以上代码,我们可以得到最小的体力耗费值
原文地址: https://www.cveoy.top/t/topic/ibkM 著作权归作者所有。请勿转载和采集!