C++ 算法:Perket 食谱 - 最小化酸味和苦味差异
```cpp #include <iostream> #include <vector> #include <cmath> using namespace std;
int N; // 成分数 vector<int> sourness; // 酸味 vector<int> bitterness; // 苦味 int minDifference = INT_MAX; // 最小区别
void findMinDifference(int index, int currSourness, int currBitterness) { // 退归结束条件 if (index == N) { int difference = abs(currSourness - currBitterness); minDifference = min(minDifference, difference); return; }
// 不选择当前成分
findMinDifference(index + 1, currSourness, currBitterness);
// 选择当前成分
currSourness *= sourness[index];
currBitterness += bitterness[index];
findMinDifference(index + 1, currSourness, currBitterness);
}
int main() { cin >> N; sourness.resize(N); bitterness.resize(N); for (int i = 0; i < N; i++) { cin >> sourness[i] >> bitterness[i]; }
findMinDifference(0, 1, 0);
cout << minDifference << endl;
return 0;
} ```
时间复杂度分析: 由于使用了退归界于求出所有可能的组合时的退归方法时的时间复杂度是O(2^N), 其中N是成分数。由于N的范围是1到10, 所以算法的时间复杂度是可接受的。
原文地址: https://www.cveoy.top/t/topic/qg5F 著作权归作者所有。请勿转载和采集!