假设有一个 int vector 。现在我们想要合并,我们选择 2 个相邻元素 v[I] 和 v[I+1] (对于每个有效的 I )并执行 v[I] = v[I+1] + v[I] 。并擦除 v[I+1]。继续这样做,直到 vector 中只剩下一个元素。(注意 I=0 & I=v.size()-1 也被视为相邻元素)。所以我们需要尝试所有这些可能的组合(即我们先选择哪一对并合并问题,如果需要进一步澄清,请在评论中告诉我)
每次合并时,我们都会执行 cost+= v[I] + v[I+1]。目标是最小化成本。举个例子, vector 是 1 2 3。合并 [1 2 3]-> [3,3] & cost=3 -> [6] & cost=9 另一种方式 [1 2 3]-> [1,5] & cost=5 -> [6] & cost=11 。那么他们的任何算法都可以生成具有给定约束的所有排列吗?
#include<bits/stdc++.h>
using namespace std;
int mn =INT_MAX;
void r(vector<int > v, int sum)
{
if(v.size()==1){if( mn >sum) mn=sum; return ;}
for(int i=0;i<v.size();i++)
{
sum+=v[i]+v[(i+1)%v.size()];
v[i]=v[i]+v[(i+1)%v.size()];
v.erase(v.begin()+(i+1)%v.size());
r(v,sum);
}
}
int main()
{
vector<int> v;//suppose we gave some input to our vector
r(v,0);
cout<<mn;
return 0;
}
#if you have a better solution, do state it, thankyou!
最佳答案
你的目标是给面试官留下深刻印象。
他们正在寻找可以在团队中工作并且可以编写可重用代码的人,当需要切换到不同的主题来处理时,可以将这些代码交给同事。
为此,学会
关于c++ - "How to impress interviewers with my coding? What practices can I adopt in the code I' 是否为给面试官留下深刻印象的问题而写的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57016753/