?
#include<bits/stdc++.h>
using namespace std;int n;
int a[15],b[15];
int ans=INT_MAX; // 初始化最小差值為一個很大的數,保證能找到最小值void dfs(int i,int s,int k){if(i==n){ // 當遍歷完所有元素時if(s==1&&k==0) return;int dif=abs(s-k);ans =min(dif,ans);return; // 結束當前遞歸調用,回到上一層}dfs(i+1,s,k);dfs(i+1,s*a[i],k+b[i]);
}int main(){cin>>n;for(int i=0;i<n;i++){cin>>a[i]>>b[i];}if(n==1){cout<<abs(a[0]-b[0]);return 0;
}dfs(0,1,0);cout<<ans;return 0;}
很重要一點,找了很久才發現,如果 s == 1 && k == 0
,說明一個也沒選,這種情況要排除。