https://www.luogu.com.cn/problem/P2036
分析一道搜索题 遍历每一种调料放或者不放
搜出绝对差最小的答案
完整代码
#include<bits/stdc++.h>
using namespace std;
int n;
const int INF=0x3f3f3f3f;
int score;
int suan,ku;
int a[11][2];
int ans =INF;
void dfs(int step,int tempsuan,int tempku){
int dqsuan = tempsuan*a[step][0];
int dqku = tempku+a[step][1];
//cout<<step<<' '<<dqsuan<<' '<<dqku<<' ';
int abss = abs(tempsuan*a[step][0]-(tempku+a[step][1]));
//cout<<abss<<endl;
ans=min(ans,abss);
if(step>=n){
return ;
}
dfs(step+1,dqsuan,dqku);
dqsuan = tempsuan;//回溯成原来的酸度 不放该调料搜索下一层
dqku = tempku;//回溯成原来的苦度 不放该调料搜索下一层
dfs(step+1,dqsuan,dqku);
}
int main(){
cin>>n;
for(int i = 1;i <= n;i++){
cin>>a[i][0];
cin>>a[i][1];
}
dfs(1,1,0);
cout<<ans;
return 0;
}