有没有办法减少一下这个程序的内存,提交代码显示内存超限了,这个代码的大致意思是对一组数字中任意两个数求最大公约数并用其将两个数替换,这样为一次操作,经过输入的指定操作数后,求出可能得出的数组和的最大值
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int GreatestCommonDivisor(int a, int b) {
int n1 = max(a, b);
int n2 = min(a, b);
int nt;
while (n2!=0)
{
nt = n1;
n1 = n2;
n2 = nt % n2;
}
return n1;
}
vector<vector<int> > Perform(vector<int> inputv) {
vector<vector<int> > outputv;
vector<int> trans;
int div;
for (int i = 0; i < inputv.size(); i++)
{
for (int j = i + 1; j < inputv.size(); j++)
{
trans = inputv;
div = GreatestCommonDivisor(trans[i], trans[j]);
trans[i] = div;
trans.erase(trans.begin() + j);
outputv.push_back(trans);
}
}
return outputv;
}
vector<vector<int> > Generate(vector<vector<int> >inputv) {
vector<vector<int> > outputv;
vector<vector<int> > trans;
for (int i = 0; i < inputv.size(); i++)
{
trans = Perform(inputv[i]);
outputv.insert(outputv.end(), trans.begin(), trans.end());
}
return outputv;
}
int sum(vector<int> inputv) {
int output = 0;
for (int value : inputv) {
output += value;
}
return output;
}
int main() {
int n,k;
cin >> n >> k;
int inputn;
vector<vector<int> > initialnum;
vector<vector<int> > trans;
vector<int> firstvector;
vector<int> sumvector;
for (int i = 0; i < n; i++)
{
cin >> inputn;
firstvector.push_back(inputn);
}
initialnum.push_back(firstvector);
for (int i = 0; i < k; i++)
{
trans = Generate(initialnum);
initialnum = trans;
}
for (vector<int> valuevector : initialnum) {
sumvector.push_back(sum(valuevector));
}
int maxsum = sumvector[0];
for (int i = 1; i < sumvector.size(); i++)
{
maxsum = max(sumvector[i], maxsum);
}
cout << maxsum;
}