求总酸度和总苦度的最小绝对值差,自行选取配料咯,有点麻烦。
总酸度=总乘积,所以int sum1=1;
总苦度=总和,所以int sum2=0;
还是用DFS,搜就对了。。循环搜索回溯,比较绝对值大小,生干。。害。
开始改了好久结果都是0,结果发现没给cha赋初值
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int n;
//int sum1=1,sum2=0;//总酸度,总苦度
int s[15],b[15];
int cha=1e9;
int vis[15];
void dfs(int x,int i,int sum1,int sum2)
{
if(x == i)
{
cha = min(abs(sum1-sum2),cha);
return;
}
for(int j=1;j<=n;j++)
{
if(vis[j]==0)
{
vis[j]=1;
dfs(x+1,i,sum1*s[j],sum2+b[j]);
vis[j]=0;
}
}
return;
}
int main()
{
cin>>n;// n >= 1 && n <= 10
for(int i=1;i<=n;i++)
{
cin>>s[i]>>b[i];
}
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
dfs(0,i,1,0);
}
cout<<cha;
return 0;
}