这个题两种遍历顺序有些点需要注意~具体看代码哦
Version 1
#include<iostream>
#include<algorithm>
using namespace std;
int s[15],b[15];
int st[15];
int n,ans=0x3f3f3f3f;
void dfs(int k){
if(k==n+1){
int have_added=0;
int sour=1,bitter=0;
for(int i=1;i<=n;i++){
if(st[i]==1){
have_added=1;
sour*=s[i];
bitter+=b[i];
}
}
if(have_added)
ans=min(ans,abs(sour-bitter));
return;
}
st[k]=2;
dfs(k+1);
st[k]=0;
st[k]=1;
dfs(k+1);
st[k]=0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i]>>b[i];
dfs(1);
cout<<ans<<endl;
return 0;
}
Version 2
#include<iostream>
#include<algorithm>
using namespace std;
int s[15],b[15];
int st[15];
int n,ans=0x3f3f3f3f;
void dfs(int k){
if(k==n+1){
int have_added=0;
int sour=1,bitter=0;
for(int i=1;i<=n;i++){
if(st[i]==1){
have_added=1;
sour*=s[i];
bitter+=b[i];
}
}
if(have_added)
ans=min(ans,abs(sour-bitter));
return;
}
st[k]=1;
dfs(k+1);
st[k]=0;
st[k]=2;
dfs(k+1);
st[k]=0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i]>>b[i];
dfs(1);
cout<<ans<<endl;
return 0;
}