在算法题中,有很多像这种对于多元方程,求一个最优解的问题。
最容易想到的方法就是暴力,对每一个变量都进行相应取值范围内的遍历。
通常这种解法都不会过。解决方法:
1.根据已知条件是否可以缩小变量的约束范围。
2.n元变量,根据等式,减少到n-1,n-2。。。个变量(这样可以减少循环次数)
源码附上:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
long long S,i,min;
cin>>S;
min=(S+1)*2;
for(i=1;i<=sqrt(S);i++)
{
int C=2*(i+S/i);
if(S%i==0&&C<min)
{
min=C;
}
}
cout<<min<<endl;
return 0;
}