这道题可以使用dfs深搜实现,在每次递归深搜时要更新ans。
#include<bits/stdc++.h> using namespace std; int n,ans=2147483647,s=1,b; bool flag[15]; struct node{ int s,b; }a[15]; void dfs(int k){ if(k==n) ans=min(ans,abs(s-b)); for(int i=1;i<=n;i++){ if(flag[i]==0){ s*=a[i].s;b+=a[i].b; flag[i]=true; if(ans>abs(s-b)) ans=abs(s-b); dfs(k+1); flag[i]=false; s/=a[i].s;b-=a[i].b; } } } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&a[i].s,&a[i].b); memset(flag,0,sizeof(flag)); dfs(0); printf("%d ",ans); return 0; }