一、题目描述

二、算法分析说明与代码编写指导
通过递归进行暴力枚举,递归函数的参数 cur 是当前正在考虑是否选择的饲料。
递归中止的条件是最后一种饲料是否选择亦考虑完毕。
进入每层递归,即正在判断每种可能的选择时,统计已选择的饲料含有的每种维生素数量是否都满足要求。如果满足,且当前方案选择的饲料种类数比已有方案更少,就将最少方案更新为当前的方案。用长度为 15 的 bitset b 和 b0 分别保存当前的选择方案和已经发现的最优选择方案。
第 cur 种饲料选择后,要将该饲料含有的各种维生素的数量加入到已选的饲料可提供的每种维生素的总数中,这个总数用数组 s 表示。当枚举不选择该种饲料的情形时,相应的维生素数量要扣除。
三、AC 代码(3 ms)
#include<cstdio>
#include<bitset>
using namespace std;
#pragma warning(disable:4996)
unsigned V, m[25], G, c[15][25], s[25]; bitset<15> b, b0; bool ok;
void dfs(const unsigned& cur) {

这篇博客详细介绍了如何使用递归暴力枚举方法解决CometOJ C0302题目的过程。在算法分析中,博主指出通过递归函数考虑每种饲料的选择,并在满足维生素需求时更新最优解。代码部分展示了3 ms内运行的AC代码,利用bitset记录饲料选择并更新维生素总数。
最低0.47元/天 解锁文章
625

被折叠的 条评论
为什么被折叠?



