假设有一个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() …Run Code Online (Sandbox Code Playgroud) 我知道我们在 C 中以这种方式更改 const 变量值(通过将其更改为非常量)。
#include<stdio.h>
#include<stdlib.h>
int main()
{
const int var = 10;
int *ptr = &var;
*ptr = 5;
printf("var = %d\n", var);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++ 中的类似事情(使用指针)给了我一个编译错误
如何更新 C++ 中的 const 变量值?