题目描述:
Perket 是一种流行的美食。为了做好 Perket,厨师必须谨慎选择食材,以在保持传统风味的同时尽可能获得最全面的味道。你有 𝑛n 种可支配的配料。对于每一种配料,我们知道它们各自的酸度 𝑠s 和苦度 𝑏b。当我们添加配料时,总的酸度为每一种配料的酸度总乘积;总的苦度为每一种配料的苦度的总和。
众所周知,美食应该做到口感适中,所以我们希望选取配料,以使得酸度和苦度的绝对差最小。
另外,我们必须添加至少一种配料,因为没有任何食物以水为配料的。
代码:
package lanqiao;
import java.util.*;
public class Main {
static int N = 20;
static boolean[] st = new boolean[N];
static int s[] = new int[N],b[] = new int[N];
static int sans = 1,bans = 0;
static int ans = (int)1e9,n;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i = 1;i <= n;i ++)
{
s[i] = sc.nextInt();
b[i] = sc.nextInt();
}
dfs(1);
System.out.println(ans);
}
public static void dfs(int u)
{
if(u > n){
boolean temp = true;
for(int i = 1;i <= n;i ++)
{
if(st[i]) temp = false;
}
if(temp) return;
ans = Math.min(ans,Math.abs(sans - bans));
return;
}
//选
sans *= s[u];
bans += b[u];
st[u] = true;
dfs(u + 1);
bans -= b[u];
sans /= s[u];
//不选
st[u] = false;
dfs(u + 1);
}
}