传送门:https://www.luogu.com.cn/problem/P1460

写这道题题解是因为对于我对题目的理解是对的,思路也比较清晰。但是在DFS代码的技巧上有欠缺导致无法写出完全AC的代码。从题解中我对DFS函数定义的参数列表有了进一步的了解,在DFS算法中,对与参数列表的定义也是极为重要的,有技巧性地定义参数列表可以减小代码的复杂度,也让写题思路更加清晰。

同时,对与DFS的标记访问和去除标记也清晰了一些,比第一天刚开始摸索时不知道从何下手进步了不少,继续加油!

言归正传。这道题目还是一个两路搜索,对于每种饲料,都可以选择加或者不加。同时还需要设置visit数组来保存访问路径。每访问后需要对此时的状态进行判定,是否满足条件,满足条件则返回并对比答案来确定是否要更新答案,不满足条件继续向下搜索。

上代码,注释写得还算详细。

#include<iostream>
using namespace std;
int Vitamin[30][30] = { 0 }, Need[30] = { 0 };
//两个数组分别是饲料各维他命含量,牛所需维他命量
int visit[30] = { 0 }, Anvisit[30] = { 0 }, ans = 5000;
//visit用来存放当前饲料编号,Anvisit存放答案的饲料编号
//ans存放答案数量,初始值为一个比较大的数
int v = 0, g = 0;
//v,g含义题目中有,不赘述
bool Judge(int amount)
{//该函数用来判断当前情况下是否已满足需求//amount是已投喂的饲料总数if (!amount)return false;//如果一种饲料都没加直接passfor (int i = 1; i <= v; i++){int sum = 0;for (int j = 1; j <= amount; j++)sum += Vitamin[visit[j]][i];//累加,算出每种维生素的含量if (sum < Need[i])return false;//一旦出现有一种含量小于需求的直接false}return true;
}
void DFS(int number,int count)
{//number为饲料编号,count为饲料总数//这样设置参数可以很大程度上避免思考得过于复杂if (number > g)return;//边界if (Judge(count)) {//如果满足条件if (count < ans) {//并且新答案比原答案小ans = count;for (int i = 1; i <= count; i++)Anvisit[i] = visit[i];//更新答案}return;//使命完成,直接返回,不需要再向下执行}visit[count + 1] = number + 1;//准备访问,先打标记DFS(number + 1, count + 1);//访问下一种饲料并加入visit[count + 1] = 0;//访问结束,消除标记DFS(number + 1, count);//访问下一种饲料但不加入
}
int main(void)
{scanf("%d", &v);for (int i = 1; i <= v; i++)scanf("%d", &Need[i]);scanf("%d", &g);for (int i = 1; i <= g; i++)for (int j = 1; j <= v; j++)scanf("%d", &Vitamin[i][j]);//一堆输入DFS(0, 0);//注意从编号零开始搜索,因为编号一也要搜索加或者不加两条路printf("%d", ans);for (int i = 1; i <= ans; i++)printf(" %d", Anvisit[i]);return 0;//完结撒花
}

洛谷P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins相关推荐

  1. 洛谷:P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins(DFS)

    题目描述 农民 John 以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维 ...

  2. P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins

    题目描述 农民 John 以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维 ...

  3. [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins

    链接 洛谷 USACO 大意 给定nnn种维生素的需求量,对于第iii种维生素的需求量,记为a[i]a[i]a[i] 给定mmm种饲料,对于第iii种饲料的第jjj种维生素,其能增加b[i][j]b[ ...

  4. [USACO2.1] 健康的荷斯坦奶牛 Healthy Holsteins

    题目 题目大意 给出一组数和一个G组数 求从G组数中取P组数,使他们的相对应的值相加都大于给定的那一组数 如果有多个解,输出饲料序号最小的(即字典序最小). 题目解析 利用二进制枚举,即1表示取,0表 ...

  5. 洛谷 P1460 健康的荷斯坦奶牛 Healthy Holsteins

    P1460 健康的荷斯坦奶牛 Healthy Holsteins 题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保 ...

  6. USACO 2.1 健康的荷斯坦奶牛 Healthy Holsteins

    健康的荷斯坦奶牛 题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛 ...

  7. 洛谷P1460 健康的荷斯坦奶牛 Healthy Holsteins

    题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命 ...

  8. 【搜索】洛谷 P1460 健康的荷斯坦奶牛 Healthy Holsteins

    题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命 ...

  9. P1460 健康的荷斯坦奶牛 Healthy Holsteins (简单的dfs)

    题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命 ...

最新文章

  1. 怎样批量调整word 图片大小?
  2. 物资管理系统c语言课程设计,C语言实现仓库物资管理系统
  3. 8-5:C++继承之多继承,菱形继承,虚继承,虚基表,继承和组合
  4. shell 学习笔记2
  5. 计算机英语板卡,数据采集卡
  6. 操作系统内存及内存管理方式
  7. Java网络编程(BIO和NIO)
  8. 机器学习之Python Sklearn——线性回归
  9. FileZilla的下载与安装以及简单使用(有图解超简单)
  10. 苹果手机快速获取UDID方式
  11. 群晖php安装目录,如何在群晖上搭建网盘目录?(无Docker) 来自 世界三傻
  12. 【CISSP备考】AIO综合错题集
  13. 【密集人群检测】Detection in Crowded Scenes: One Proposal, Multiple Predictions例程实现
  14. mysql重启后自动关闭_mysql服务自动关闭的解决
  15. 领域搜索算法java_使用JAVA实现算法——禁忌搜索算法解决TSP问题
  16. 自主可控!搭载龙芯二号,飞凌嵌入式FET-2K0500-C核心板发布
  17. 分享一个超级简单简洁的单页导航网站源码,不到1m,带valine评论设置
  18. (转载)来一本奥运版圣经?
  19. 这是一个忧伤的问题:看不懂英文资料怎么办?
  20. E4438C ESG 矢量信号发生器,1, 2, 3, 4, 6GHz

热门文章

  1. 电路仿真软件proteus简单使用
  2. 增加/删除临时IP地址
  3. 使用STM32f103点亮led灯——库函数版本
  4. 【Android】TypedArray——三个方法获取dimen返回值的类型
  5. oracle 使用,Oracle 使用
  6. SVLAN,CVLAN,PVLAN是属于SVLAN(Stack VLAN)的观念
  7. List集合去重方法
  8. Qt多线程之继承QObject(moveToThread方式)
  9. 迅为RK3399开发板Linux系统TFTP传输文件服务器测试
  10. Android显示Gif图片