Ram*_*uri 4 c++ algorithm coding-style vector
假设有一个int向量。现在我们要进行合并,我们选择2个相邻元素v [I]和v [I + 1](对于每个有效I),然后做v [I] = v [I + 1] + v [I]。并擦除v [I + 1]。继续执行此操作,直到在向量中只剩下一个元素为止(注意I = 0和I = v.size()-1也被视为相邻元素)。因此,我们需要尝试所有可能的组合(例如,如果需要进一步说明,我们首先采用哪对并合并的问题,请在评论中告知我)
每次合并时,我们都会进行cost + = v [I] + v [I + 1]。目标是使成本最小化。例如,向量为1 23。合并[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!
Run Code Online (Sandbox Code Playgroud)
您的目标是打动面试官。
他们正在寻找可以在团队中工作并且可以创建可重用代码的人员,这些代码可以在需要切换到其他主题进行工作时移交给同事。
为此,学习