不知道如何剪枝:
#include<bits/stdc++.h>
using namespace std;
int n,u,mini=1e9,a1=0,b1=0,a[35],b[35],totol=0;
void dfs(int x){
if(x>n){
if(a1+b1>=u){
mini=min(mini,abs(a1-b1));
totol++;
}
return ;
}
dfs(x+1);
a1+=a[x];
b1+=b[x];
dfs(x+1);
a1-=a[x];
b1-=b[x];
}
int main(){
scanf("%d%d",&n,&u);
for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);
dfs(1);
if(totol>=1)printf("%d",mini);
else printf("-1");
return 0;
}
https://www.luogu.com.cn/record/132225803