分析:
看似这道题的题目很长,但是总结起来就是求一个最小的子集。
所以我们用dfs来把它所有子集列出来,然后找一个最小的就可以了。
#include<stdio.h>
#include<math.h>
#define min(a,b) a<b?a:b
int n;
unsigned ans=-1;
struct food
{
int s;
int b;
}perket[10];
void dfs(int num,int ssum,int bsum)
{
if(num>=n) return;
for(int i=num+1;i<n;i++)
{
ans=min(ans,abs(ssum*perket[i].s-bsum-perket[i].b));
// printf("ans is %u\n",ans);
dfs(i,ssum*perket[i].s,bsum+perket[i].b);
}
}
main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&perket[i].s,&perket[i].b);
}
dfs(-1,1,0);
printf("%u",ans);
}