题目在
这题暴力枚举的同时用到了dfs,与一般的暴力枚举不同。
minn结果一开始要设成最大的,不然的话过不了。
dfs与一般的差不多,首先要给出终止条件再进行遍历查找。
#include<bits/stdc++.h>
using namespace std;
struct aa
{
int a,b;
}s[11];
int n,minn,f[11];
void dfs(int i,int x,int suan,int ku)
{
if(i==x)//dfs结束的条件
minn=min(abs(suan-ku),minn);
for(int j=0;j<n;j++)
if(x<=i&&f[j]==0)
{
f[j]=1;
dfs(i,x+1,suan*s[j].a,ku+s[j].b);
f[j]=0;
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>s[i].a>>s[i].b;
minn=10000000;
for(int i=1;i<=n;i++)
dfs(i,0,1,0);//初始状态
cout<<minn;
}