CSP考试复习:第二单元 基础算法2.8Healthy Holsteins :农民约翰以他有世界上最健康的奶牛为骄傲他知道每种饲料的各种维生素的含量,以及一头牛每天需要最少的维生素的量…2.9小结

这篇博客回顾了CSP考试中关于基础算法的题目,重点讲解了如何解决'Healthy Holsteins'问题,通过枚举、递归和递推三种方法。还对枚举法的优化、递归的边界条件以及递推的状态转移进行了深入分析。
摘要由CSDN通过智能技术生成

2.8 Healthy Holsteins

【问题描述】
农民约翰以他有世界上最健康的奶牛为骄傲。他知道每种饲料的各种维生素的含量,以及一头牛每天需要
最少的维生素的量。请你帮助约翰喂养这些奶牛,使得它们能够保持健康,并且消耗的饲料种类最少。
【输入格式】
第一行:一个数 V(1≤V≤25),表示维生素的种类数。
第二行:V 个整数,表示一头牛一天需要的维生素量。一个整数对应一种维生素。
第三行:一个数 G(1≤G≤15),表示饲料的种类数。
第四行:G 个整数,表示每种饲料的各种维生素的含量。
【输出格式】
输出共一行。第一个数是需要的最少的饲料种类数。从第二个数开始,输出所需的饲料种类序号。请输出
字典序最小的解。
【分析】
本题最多只有 15 种饲料。如果尝试所有取法,也只有 2
15=32768 种状态,因此完全可以枚举所有方案。
考虑一种饲料,它要么用来喂牛,要么扔到一边去。用来喂牛可以用“1”表示,放到一边用“0”表示。
于是,G 种饲料的状态可以转化成一个 G 位的二进制数。这样,枚举 0 到 2
G-1 的数,就枚举了所有状态。
当然这只是一种思路。如果不能熟练使用位运算,这种做法的编程复杂度会比 DFS 高很多。
【代码】

#include <iostream>
using namespace std;
int v, req[26];
int g, vitamin[16][26];
int Min=100, minstat=0; // Mi
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值