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 ...
随机推荐
- PHPstorm同步服务器代码的缺点---命名空间undefined
在把一个服务器的代码同步到phpstorm下开发的时候,发现新建的命名空间代码都失效了,然而换到 https://blog.csdn.net/afraid_to_have/article/deta ...
- 大O法时间复杂度计算
困惑的点——log,如何计算得出? ① 上限:用来表示该算法可能有的最高增长率. ② 大O表示法:如果某种算法的增长率上限(最差情况下)是f(n),那么说这种算法“在O(f(n))中”.n为输入规模. ...
- iOS开发UITableView的动画cell
1.动画cell 针对cell的动画,在Delegate中对cell的layer进行操作: 2.实现代码 #import "ViewController.h" #import &q ...
- csdn阅读更多自动展开插件
点击获取 当然也可以自己写脚本.写js.
- PAT甲级——A1087 All Roads Lead to Rome【30】
Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...
- Delphi遍历进程-Win32API
本博客的Delphi代码使用的版本均为DelphiXE10.x 1.1 .枚举进程 通过进程名称获取指定的进程ID,代码很详细,不再赘述 unit Uuitls; interface uses TlH ...
- Linux CentOS CapsLock 大小写反转问题 解决
虚拟机centos7,输入大小写字母反了,开启capslock的时候变成小写字母了,关闭则变成大写了... 只需要执行 setleds +caps 或 setleds -caps 即可,如图:
- 2019-8-30-C#-如何在项目引用x86-x64的非托管代码
title author date CreateTime categories C# 如何在项目引用x86 x64的非托管代码 lindexi 2019-08-30 08:53:52 +0800 20 ...
- [Cqoi2015] 编号 【逆向思维,暴力枚举】
Online Judge:Luogu-P4222 Label:逆向思维,暴力枚举 题目描述 你需要给一批商品编号,其中每个编号都是一个7位16进制数(由0~9, a-f组成).为了防止在人工处理时不小 ...
- 二进制操作(1)–Bytes
1,Bytes的单元被当作字符串处理. 例如: 有些介绍会声称上述程序会得到这样的结果:b'\x00\x00\x00\x00' 在python v2.7.10上是得不到此结果的. 实际上,如果 typ ...