P1460 健康的荷斯坦奶牛 Healthy Holsteins
P1460 健康的荷斯坦奶牛 Healthy Holsteins
题目描述
农民JOHN以拥有世界上最健康的奶牛为傲。他知道每种饲料中所包含的牛所需的最低的维他命量是多少。请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少。
给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少。
维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解。
输入输出格式
输入格式:
第1行:一个整数V(1<=V<=25),表示需要的维他命的种类数。
第2行:V个整数(1<=每个数<=1000),表示牛每天需要的每种维他命的最小量。
第3行:一个整数G(1<=G<=15),表示可用来喂牛的饲料的种数。
下面G行,第n行表示编号为n饲料包含的各种维他命的量的多少。
输出格式:
输出文件只有一行,包括
牛必需的最小的饲料种数P
后面有P个数,表示所选择的饲料编号(按从小到大排列)。
如果有多个解,输出饲料序号最小的(即字典序最小)。
输入输出样例
4
100 200 300 400
3
50 50 50 50
200 300 200 300
900 150 389 399
2 1 3
说明
USACO 2.1
翻译来自NOCOW
被卡了一个小时,第一次写剪纸的蒟蒻就是我。
首先就是要枚举不重复的子集,根据测算,只需要枚举25 +24 +23 +...+1 = (25 + 1)*25/2个子集,所以时间复杂度是相当低的。
但是如果枚举成25!的子集,一定会崩掉。
我们为了避免枚举重复的子集,采取了这样的枚举自己方法(紫书里还有一种):
枚举子集内元素个数1..n,并保证子集是单调递增的。这样就能够补充不漏的枚举子集。
上代码。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm> const int MAXN = 25 + 15;
const int MAXM = 15 + 15; int n;
int min[MAXN];
int m;
int value[MAXM][MAXN]; int c[MAXN]; int num[MAXN];
bool b[MAXM]; bool IsFull[MAXN]; int ans; int cnt;
bool ok; void dfs(int step,int pre)
{
if(ok)return;
if(step > cnt + 1) return;
if(step == cnt + 1)
{
for(int i = 1;i <= n;i ++)
{
int sum = 0;
for(int j = 1;j <= cnt;j ++)
{
sum += value[num[j]][i];
}
if(sum < min[i])return;
}
ans = cnt;
ok = true;
return;
} for(int i = 1;i <= m;i ++)
{
if(ok)return;
if(i <= pre)continue;
if(!b[i])
{
num[step] = i;
b[i] = true;
dfs(step + 1,i);
b[i] = false;
}
}
} int main()
{
freopen("data.txt", "r", stdin);
ans = 99999999;
scanf("%d", &n);
for(int i = 1;i <= n;i ++)
{
scanf("%d", &min[i]);
}
scanf("%d", &m);
for(int i = 1;i <= m;i ++)
{
for(int j = 1;j <= n;j ++)
{
scanf("%d", &value[i][j]);
}
}
for(int i = 1;i <= m;i ++)
{
cnt ++;
dfs(1,0);
if(ok) break;
}
printf("%d ", ans);
for(int i = 1;i <= ans;i ++)
{
printf("%d ", num[i]);
}
return 0;
}
P1460 健康的荷斯坦奶牛 Healthy Holsteins的更多相关文章
- 洛谷 P1460 健康的荷斯坦奶牛 Healthy Holsteins
P1460 健康的荷斯坦奶牛 Healthy Holsteins 题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保 ...
- 洛谷P1460 健康的荷斯坦奶牛 Healthy Holsteins
题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命 ...
- P1460 健康的荷斯坦奶牛 Healthy Holsteins (简单的dfs)
题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命 ...
- P1460 健康的荷斯坦奶牛 Healthy(DFS)
思路:这道题还是用了小小的剪枝,这里要注意的是该题有很多中构建树的顺序,但是,在这众多顺序中不一定都能保证输出的方案字典序最小. 构建搜索树:如图构建 剪枝,emmm,看代码: #include< ...
- USACO Healthy Holsteins
首先看题目: Healthy HolsteinsBurch & Kolstad Farmer John prides himself on having the healthiest dair ...
- USACO 2.1 Healthy Holsteins
Healthy HolsteinsBurch & Kolstad Farmer John prides himself on having the healthiest dairy cows ...
- p1460 Healthy Holsteins
列举所有的子集找最优就行. #include <iostream> #include <cstdio> #include <cmath> #include < ...
- 【USACO 2.1】Healthy Holsteins
/* TASK: holstein LANG: C++ URL: http://train.usaco.org/usacoprob2?a=SgkbOSkonr2&S=holstein SOLV ...
- USACO Healthy Holsteins DFS
使用排列组合,遍历所有可能的情况C(1)+C(2)+C(3)……C(n)= 2^G种组合 数据规模不大,暴力过去最多也就是2^15 = 23768种情况 所以就暴力咯,不过还是Debug了一会 Sou ...
随机推荐
- Solrj demo
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- exiftool(-k)与gui的联合使用
首先下载一个exiftool下载后改名字https://sno.phy.queensu.ca/~phil/exiftool/ 根据自己的操作系统选择,我需要这个 然后下载guihttp://u88.n ...
- window查看端口信息
netstat -nao |findstr "2129" 列出所有端口的情况 tasklist|findstr "pid" 查看对应进程信息
- Spring-白话事物
什么是事物,把一组逻辑放在一起作为一个单元来提交执行,这就是事物,这不是定义,大概是这么个意思 如果你留心的话,你会看到到处都有事物,到处都会提到ACID四个特性(原子性,一致性,隔离性,持久性) R ...
- mysql limit 偏移量过大效率解决方式 转贴
原文地址:https://www.jianshu.com/p/f8d81df7ab28 SELECT * FROM product , ) limit SELECT * FROM product a ...
- 03_Sklearn的安装
1.Scikit-learn库介绍:包含许多知名的机器学习算法的实现,文档完善.容易上手,丰富的API. 2.安装:创建一个基于Python3的虚拟环境(可以在已有的虚拟环境中):mkvirtuale ...
- tcpdump 抓包
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- 廖雪峰Java10加密与安全-4加密算法-5非对称加密算法
1.非对称加密 非对称加密就是加密和解密使用的不是相同的密钥 方法1: * 加密:用自己的私钥加密,然后发送给对方:encrypt(privateKeyA, message)->s * 解密:对 ...
- Redis开发及管理实战
目录 Redis数据类型 字符串 String string类型操作 字典 Hash 列表 List 集合 Set 有序集合 SortedSet 生产消费模型 Redis事务管理 事务命令 示例 Re ...
- git commit规范工具
npm install -g commitizen commitizen init cz-conventional-changelog --save --save-exact 以后,凡是用到git c ...