这题是一个比较简单的dfs
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;
int n,s[maxn],b[maxn];
int ans=0x7fffffff; //因为要求总酸度和总苦度的最小绝对差 所以要把ans初始化大
void dfs(int N,int S,int B) //N是当前配料的编号
{
if(N>n) //全部搜完
{
if(S==1 && B==0) //特判 为全部没选的情况 但是题目要求必须选 少了这句话有些答案输出的就是1
return;
ans=min(abs(S-B),ans); //更新ans
return;
}
dfs(N+1,S*s[N],B+b[N]); //加下一种调料的情况
dfs(N+1,S,B); // 不加下一种调料的情况
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i]>>b[i];
dfs(1,1,0); //因为0乘任何数都为0 所以酸度初始化为1
cout<<ans;
return 0;
}