这题拖了很久,一开始想用dfs结果写不出来,然后在网上看到应该枚举而且又看到这种状态压缩枚举算学到东西了,接着又看到用bfs的。

/*
ID: nanke691
LANG: C++
TASK: holstein
*/
#include<iostream>
#include<fstream>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
struct node
{int state;//用位来记录路径,即使用过哪几种饲料int ver[26];//保存状态值,short cur;//当前选择的编号最大的饲料short cnt;//已选择的种类数
};
int hol[20][30];
int V,G,aim[30],len,ans;
queue<node> Q;
bool  compare(int *a)//判断是否符合条件
{for(int i=1;i<=V;i++)if(a[i]<aim[i])return false;return true;
}
void BFS()
{node s,f;for(int i=1;i<=G;i++){for(int j=1;j<=V;j++)s.ver[j]=hol[i][j];s.state=(1<<(i-1));s.cur=i;s.cnt=1;Q.push(s);}len=100000000;while(!Q.empty()){f=Q.front();Q.pop();if(f.cnt<=len && compare(f.ver)){len=f.cnt;  ans=f.state;break;}for(int i=f.cur+1;i<=G;i++){for(int j=1;j<=V;j++)s.ver[j]=f.ver[j]+hol[i][j];s.cnt=f.cnt+1;s.cur=i;s.state=(f.state | (1<<(i-1)));//记录下当前选取的编号Q.push(s);}}
}
int main()
{freopen("holstein.in","r",stdin);freopen("holstein.out","w",stdout);scanf("%d",&V);for(int i=1;i<=V;i++)scanf("%d",&aim[i]);scanf("%d",&G);for(int i=1;i<=G;i++)for(int j=1;j<=V;j++)scanf("%d",&hol[i][j]);BFS();cout<<len<<' ';int flag=0;for(int i=1;i<=G;i++){if((ans &(1<<(i-1)))!=0){if(!flag)cout<<i,flag=1;else cout<<' '<<i;}}cout<<endl;
}

第二种方法就是简单的bfs不过他记录路径的方法很巧妙,学习了。代码直接搬过来了

/*
ID :jinbo wu
LANG: C++
TASK:holstein
*/
#include<bits/stdc++.h>
using namespace std;
int a[30];
int b[20][30];
int ans[25];
int t[25];
int sum,mark,flag,cnt;
int main()
{freopen("holstein.in","r",stdin);freopen("holstein.out","w",stdout);int n,l;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);int g;scanf("%d",&g);for(int i=0;i<g;i++){for(int j=0;j<n;j++)scanf("%d",&b[i][j]);}int maxn=1<<g;sum=maxn;for(int i=1;i<=maxn;i++){flag=0;cnt=0;int temp=i;while(temp){if(temp&1) cnt++;if(cnt>=sum){flag=1;break;}temp>>=1;}if(flag)continue;temp=i;l=0;memset(t,0,sizeof(t));while(temp){if(temp&1){for(int j=0;j<n;j++)t[j]+=b[l][j];}temp>>=1;l++;}for(int j=0;j<n;j++){if(t[j]<a[j]){flag=1;break;}}if(flag==0){sum=cnt;mark=i;}}printf("%d",sum);l=1;while(mark){if(mark&1)printf(" %d",l);mark>>=1;l++;}printf("\n");
}

第二种方法就是简单的bfs不过他记录路径的方法很巧妙,学习了。代码直接搬过来了

第二种方法就是简单的bfs不过他记录路径的方法很巧妙,学习了。代码直接搬过来了

usaco Healthy Holsteins相关推荐

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

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

  2. USACO 2.1.4 健康的荷斯坦奶牛 Healthy Holsteins

    题解 这道题我一直想着用dp来解,因为我觉得和01背包很像. 但是这个容量数据没办法用数组表示,所以一直想不到解法. 我默认dfs是会指数爆炸的不好解法,所以一开始就没考虑,但这题的数据很弱- 代码 ...

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

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

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

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

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

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

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

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

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

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

  8. USACO-Section2.1 Healthy Holsteins (深度优先搜索)

    2017-8-15 题目描述 1.喂给牛的饲料的种数最少 2.所需的饲料剂量最少 3.输出饲料序号最小的 解答 我用的是dfs求出所有情况 1.最大种数从1开始到n,若当前种数有满足条件的,就是他了, ...

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

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

最新文章

  1. C语言中(字符串)输入scanf()、gets()、fgets()以及getchar()、getc()函数的联系与区别
  2. [Google API](3)创建搜索
  3. python怎么用excel-如何用python打开excel
  4. UNPIVOT的详细说明
  5. 微软亚洲研究院的“人立方”搜索
  6. 企业是否应该实现对客户需求的快速响应_CRM系统给企业带来的创新有哪些?如何让销售爱用CRM系统?...
  7. [bash] 打包某目录(可以是绝对路径)下的指定扩展名的文件
  8. typescript箭头函数参数_Typescript 入门基础篇(一)
  9. 6大设计原则之单一职责原则
  10. 分分钟实现底部导航栏:BottomNavigationBar快速集成
  11. 视频信息查看,帧信息查看
  12. centos7部署gitlab遇到的坑
  13. Struts1.x多文件上传问题
  14. Python学习路程-常用设计模式学习
  15. [转]CMS Content Management System(内容管理系统) 提供商
  16. 已解决谷歌浏览器打不开axure原型
  17. 使用ESP8266模块在WIFI下通过网页远程控制LED开关
  18. HHL论文第一弹(总结算法基本思想、QRAM制备量子态)
  19. 什么是tomcat?tomcat是干什么用的?
  20. 华硕笔记本BIOS设置禁用UEFI后使用U盘装系统方法

热门文章

  1. 2022-2028年中国氟硅橡胶产业发展动态及投资前景分析报告
  2. 【软件工程】VB版机房文档总结
  3. 命名实体识别入门教程(必看)
  4. LeetCode简单题之按键持续时间最长的键
  5. TVM优化Deep Learning GPU算子
  6. OFRecord 数据集加载
  7. H.265视频编码与技术全析(下)
  8. php-7.3.13 configure: error: Please reinstall the libzip distribution
  9. c++ 类的定义与使用
  10. error: Can not locate config makefile for product “xx“.