You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
1.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long LL;
const int N = 20;
int n;
int s[N], b[N];
LL MIN = INF;
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> s[i] >> b[i];
//穷举所有可能的酸度和苦度
//使用二进制枚举法,遍历所有可能性,然后分别计算总的酸度和苦度,找出最小的。
int U = 1 << n; //U-1即为全集 ,比如 1<<5 就是 2的5次方就是32U=32。而U-1=31就是表示 1 1 1 1 1
for (int S = 1; S < U; S++) { //枚举所有子集[0,U) //为啥从1开始因为0代表啥也不选就是白水
LL sum_s = 1, sum_b = 0;
//是哪些数存在于子集中呢?
for (int i = 0; i < n; i++) {
int bit = (S >> i) & 1;
if (bit) sum_s *= s[i], sum_b += b[i]; //遍历数字S的每一位如果不是0表示这一位上的数字是存在的需要加进来
}
MIN = min(MIN, abs(sum_s - sum_b));
}
cout << MIN << endl;
return 0;
}