佳肴 (Standard IO)

题意/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.



原文地址:https://www.cnblogs.com/zyx-crying/p/9319657.html