题意/Description:
佳肴就是非常美味的菜的意思,佳肴最关键的是选择好原料。
现在有N种原料,每种原料都有酸度S和苦度B两个属性,当选择多种原料时,总酸度为每种原料的酸度之积,总苦度为每种原料的苦度之和。
正如大家所知,佳肴是既不酸也不苦的,因为要保证所选的原料使得总酸度和总苦度差的绝对值最小。
由于佳肴不能只有水,所以必须至少选择一种佳肴。
读入/Input:
输入第一行包含一个整数N(1<=N<=10),表示原料的种数。
接下来N行每行包含两个用一个空格隔开的整数,分别表示酸度和苦度。
输入数据保证如果所有原料都选上,总酸度和总苦度不会超过10^9。
输出/Output:
输出总酸度和总苦度最小的差。
题解/solution:
水字,暴搜也可以,组合也可以。下面是组合。
代码/Code:
const
maxn=20;
var
n,i,r,min:longint;
ans,x,y:array[0..maxn] of longint;
procedure dfs(k,p:longint);
var
i,sx,sy:longint;
begin
if k=r+1 then
begin
sx:=1; sy:=0;
for i:=1 to r do
begin
sx:=sx*x[ans[i]];
sy:=sy+y[ans[i]];
end;
if abs(sx-sy)<min then min:=abs(sx-sy);
exit;
end;
for i:=p downto 1 do
begin
ans[k]:=i;
dfs(k+1,i-1);
end;
end;
begin
readln(n);
for i:=1 to n do
readln(x[i],y[i]);
min:=maxlongint;
for r:=1 to n do
dfs(1,n);
write(min);
end.