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 ...
随机推荐
- iOS开发CATransform3D.h属性详解和方法使用
1.CATransform3D简介 layer有个属性transform,是CATransform3D类型.可以使其在三维界面作平移.缩放和旋转单独或组合动画! CATransform3D结构体: / ...
- WebSocket实践
基本弄清楚了WebSocket的来龙去脉后,开始了实现WebSocket技术的探索. 看过一篇文章,测试了八种WebSocket框架性能,得以了解到实现WebSocket技术的框架有: Netty.U ...
- 表单控件绑定v-model
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- vue alert插件(标题为图片)(自写)
<template> <div class="modelSelf"> <div class="model" @click=&quo ...
- 对话框处理Enter,Esc键相应问题
在类视图里面选择你要实现的类,右键属性,在属性里面找到函数PreTranslateMessage,然后添加PreranslateMessage的消息函数,在PreTranslateMessage的消息 ...
- .net面试问题总结
原文://http://blog.csdn.net/wenyan07/article/details/41541489 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要 ...
- sql 2000 or sql2005 数据库日志删除
数据库日志清理(sql 2000 or sql2005)DUMP TRANSACTION crm WITH NO_LOGBACKUP LOG crm WITH NO_LOGDBCC SHRINKDAT ...
- rsync+sersync
Environmental introduction System Kernel : -.el6.x86_64 Source Server : 192.168.7.1 Target Server : ...
- 修改linux命令行的提示符PS1
# If not running interactively, don't do anything [ -z "$PS1" ] && return # check ...
- php 网页内容抓取
最近抓的2个网站内容的代码 列表页抓取:第一种使用phpquery插件,可以快速获取,第二种它是api,所以直接获取 load_third("phpQuery.php"); /** ...