考点
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <bits/stdc++.h>
using namespace std;
struct node { int sour_, bitter_; } arr[10];
int ans = INT_MAX, N;
void dfs(int idx, int sum_sour, int sum_bitter) { if (sum_sour != 1 && sum_bitter != 0) ans = min(ans, abs(sum_sour - sum_bitter)); if (idx == N) return; dfs(idx + 1, sum_sour, sum_bitter); dfs(idx + 1, sum_sour * arr[idx].sour_, sum_bitter + arr[idx].bitter_); }
int main() { cin >> N; for (int i = 0; i < N; ++i) cin >> arr[i].sour_ >> arr[i].bitter_; dfs(0, 1, 0); cout << ans; return 0; }
|
思路
每种配料都有选与不选两种情况,且最多只有10个配料,即210的复杂度,可以直接暴力DFS
题目说至少选一种配料,且酸度和苦度不同时为1和0
也就是说,只有初始状态,和所有配料都没选这两种特殊情况才有可能出现酸度为1且苦度为0
所以直接屏蔽酸度为1且苦度为0时的情况即可
1 2
| if (sum_sour != 1 && sum_bitter != 0) ans = min(ans, abs(sum_sour - sum_bitter));
|