
假设我们有两个数组 A 和 B,每个数组的大小为 n。有n份礼物,我们想把它们送给一些孩子。第 i 份礼物有 A[i] 颗糖果和 B[i] 个橙子。在一次移动过程中,我们可以选择一些礼物并执行以下操作之一 –
从该礼物中取出一颗糖果(如果有); p>
从这份礼物中取出一颗橙子(如果有的话);
从这份礼物中取出一颗糖果和一颗橙子礼物(如果有的话)。
所有礼物都应该是平等的。这意味着经过一系列的移动之后,以下两个应满足条件:A[0] = A[1] = … = A[n-1] 和 B[0] = B[1] = … = B[n-1]。我们必须找到使所有给定的礼物相等所需的最少步数。
问题类别
上述问题可以通过应用贪心问题解决技术来解决。贪婪算法技术是当前最佳解决方案是的算法类型选择而不是尝试所有可能的解决方案。贪心算法技术也用于解决优化问题,就像它的大哥动态规划一样。动态中编程时,需要遍历所有可能的子问题,找出最优的解决方案,但它有一个缺点;这需要更多的时间和空间。所以,在各种场景贪婪技术用于找出问题的最佳解决方案。虽然确实如此并不是在所有情况下都能给出最佳解决方案,如果精心设计,它可以比以下更快地产生解决方案动态规划问题。贪心技术提供了局部最优解优化问题。这种技术的例子包括 Kruskal 和 Prim 的最小生成树(MST)算法、霍夫曼树编码、Dijkstra 的单源最短路径问题等
https://www.tutorialspoint.com/data_structurals_algorithms/greedy_algorithms.htm
立即学习“C++免费学习笔记(深入)”;
https://www.tutorialspoint.com/data_structurals_algorithms/dynamic_programming.htm p>
所以,如果我们问题的输入是这样的 A = [3, 5, 6]; B = [3, 2, 3],则输出为 6,因为最初是从 B 中取出,所以现在 B[0] 变成 [2, 2, 3],然后从 A[1] 中取出,所以 A =[3, 4, 6],然后再次从 A[1] 中取出,因此 A = [3, 3, 6],然后从 A[2] 和 B[2] 中取出,因此它们变为 [3, 3, 5] 和 [2, 2, 2],然后从 A[2] 变为 A = [3, 3, 4],再次从 A[2] 变为使其成为 [3, 3, 3]。所以现在 A 有相同数量的糖果,B 有相同数量的橙子。
步骤
为了解决这个问题,我们将遵循以下步骤 –
minA := infminB := infkq := 0n := size of Afor initialize i := 0, when i < n, update (increase i by 1), do: minA := minimum of minA and A[i]for initialize i := 0, when i < n, update (increase i by 1), do: minB := minimum of minB and B[i]for initialize i := 0, when i < n, update (increase i by 1), do: kq := kq + maximum of (A[i] - minA) and (B[i] - minB)return kq
示例
让我们看看以下实现,以便更好地理解 –
#include using namespace std;int solve(vector A, vector B){ int minA = 999, minB = 999, kq = 0; int n = A.size(); for (int i = 0; i < n; i++) minA = min(minA, A[i]); for (int i = 0; i < n; i++) minB = min(minB, B[i]); for (int i = 0; i < n; i++) kq += max(A[i] - minA, B[i] - minB); return kq;}int main(){ vector A = { 3, 5, 6 }; vector B = { 3, 2, 3 }; cout << solve(A, B) << endl;}
输入
{ 3, 5, 6 }, { 3, 2, 3 }
输出
6
以上就是C++程序:计算使所有礼物数量相等的操作次数的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445032.html
微信扫一扫
支付宝扫一扫