题目描述
Perket 是一种流行的美食。为了做好 Perket,厨师必须谨慎选择食材,以在保持传统风味的同时尽可能获得最全面的味道。你有 �n 种可支配的配料。对于每一种配料,我们知道它们各自的酸度 �s 和苦度 �b。当我们添加配料时,总的酸度为每一种配料的酸度总乘积;总的苦度为每一种配料的苦度的总和。
众所周知,美食应该做到口感适中,所以我们希望选取配料,以使得酸度和苦度的绝对差最小。
另外,我们必须添加至少一种配料,因为没有任何食物以水为配料的。
输入格式
第一行一个整数 �n,表示可供选用的食材种类数。
接下来 �n 行,每行 22 个整数 ��si 和 ��bi,表示第 �i 种食材的酸度和苦度。
输出格式
一行一个整数,表示可能的总酸度和总苦度的最小绝对差。
输入输出样例
输入 #1复制
1 3 10
输出 #1复制
7
输入 #2复制
2 3 8 5 8
输出 #2复制
1
输入 #3复制
4 1 7 2 6 3 8 4 9
输出 #3复制
1
代码:
#include<stdio.h>
int n,a[10]={0},b[10]={0},c[10]={0},i,min=99999;
void kk(int x)
{
int j,s1=1,s2=0;
if(x==i)//有x种配料了进行计算保持少于min的
{j=0;
for(j=0;j<n;j++)
if(c[j]==1)//有数组中那些配料
s1*=a[j],s2+=b[j];
if(s1>s2)s1-=s2;
else s1=s2-s1;
if(min>s1)min=s1;
return ;
}
else for(j=0;j<n;j++)//dfs模型
{
if(c[j]==0)
{
c[j]=1;
kk(x+1);
c[j]=0;
}
}
}
main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
for(i=1;i<=n;i++)//一种配料到n种
kk(0);
printf("%d",min);
}