刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

题目描述:

小贝要做一份黑暗料理,现有N(2≤N≤20)种不同的食材供她选择,食材编号从1到N。其中有些食材同时食用会产生副作用,所以产生副作用的食材只能选择其中一种食材或者都不选择。

已知同时食用会产生副作用的食材有M对(0≤M≤N*(N-1)/2),请计算出这份黑暗料理中最多能有多少种食材。

注意:会产生副作用的食材以两个编号表示,两个编号不等且编号小的在前,例如(1,2)和(2,3)。

例如:N=5,M=3时,5种食材编号为1到5,其中有3对食材会产生副作用:(1,2)、(2,3)、(4,5)。

可选择1、3、4号食材或1、3、5号食材做黑暗料理,最多可以有3种食材。

【输入描述】

第一行输入两个正整数N(2≤N≤20)和M(0≤M≤N*(N-1)/2),分别表示食材数量及会产生副作用的食材对数,两个正整数之间以一个空格隔开接下来输入M行,每行两个正整数(1≤正整数≤N),表示会产生副作用的两种食材编号,两个正整数之间以一个空格隔开,两个编号不等且编号小的在前

【输出描述】

输出一个整数,表示这份黑暗料理中最多能有多少种食材


【样例输入】

5 3
1 2
2 3
4 5

样例输出

3


使用微信搜索喵呜刷题,轻松应对考试!

答案:

```#include #include #include using namespace std;int maxIngredients(int N, int M, vector> pairs) vector used(N + 1, 0);for (auto p : pairs) {used[p.first] = 1;used[p.second] = 1;}int maxIngredientsCount = 0;for (int i = 1; i <= N; i++) {if (used[i] == 0) {maxIngredientsCount++;for (auto p : pairs) {if (p.first == i) {used[p.second] = 1;}}}}return maxIngredientsCount;int main() int N, M;cin >> N >> M;vector> pairs(M);for (int i = 0; i < M; i++) {int a, b;cin >> a >> b;pairs[i] = {a, b};}sort(pairs.begin(), pairs.end(), [](pair p1, pair p2) {return p1.first < p2.first || (p1.first == p2.first && p1.second < p2.second);});int maxIngredients = 0;for (int i = 1; i <= N; i++) {int ingredients = 0;vector used(N + 1, 0);for (auto p : pairs) {if (p.first == i) {ingredients++;used[p.second] = 1;}}maxIngredients = max(maxIngredients, ingredients);}cout << maxIngredients << endl;return 0;```

解析:

【喵呜刷题小喵解析】:

本题是一个典型的动态规划问题,可以通过遍历所有可能的食材组合,然后计算其中不包含副作用的食材数量来求解。

首先,我们需要将输入的食材对按照编号从小到大的顺序进行排序,这样可以方便我们后续的判断。

然后,我们可以遍历每一个食材,对于每一个食材,我们检查是否存在与之对应的食材对,如果存在,那么我们就将与之对应的食材标记为已使用,并且食材数量加一。

最后,我们返回食材数量最大的值,即为答案。

但是,这种方法的时间复杂度为O(N^2),对于较大的N,效率较低。

为了优化算法,我们可以使用贪心算法的思想。对于每一个食材,我们检查是否存在与之对应的食材对,如果存在,那么我们只选择其中一个食材,这样可以保证选择的食材数量最多。

具体实现时,我们可以使用一个布尔数组来记录每一个食材是否被使用,然后遍历每一个食材,如果食材没有被使用,那么我们就将其加入答案中,并且将与之对应的食材标记为已使用。

最后,我们返回答案即可。这种方法的时间复杂度为O(N+M),效率较高。
创作类型:
原创

本文链接:题目描述: 小贝要做一份黑暗料理,现有N(2≤N≤20)种不同的食材供她选择,食材编号从1到N。其中

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share