USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】
holstein解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
你需要给一头奶牛制定最优的喂养计划。
有V种维他命,每天对于每种维他命,牛都有需要达到的指标;
同时你有G种饲料,编号依次为1到G,每种维他命在每种饲料中所蕴含的量都会给你。
请你从中选出N种饲料,在达到指标的前提下让N最小。
【数据范围】
1<=V<=25
1<=每种维他命的指标<=1000
1<=G<=15
【输入格式】
第一行是V,后面V行依次给出1号到V号维他命的指标;
下面一行是G,后面G行依次是G种饲料,每行V个数,分别代表本饲料中各种维他命的含量。
【输出格式】
仅一行,各数用空格隔开。
第一个数是所需的饲料种数N,后面N个数依次是所选饲料的编号。
注意,若有多种方案N相同,则仅输出字典序最小的一组方案。
【输入样例】
4
100 200 300 400
3
50 50 50 50
200 300 200 300
900 150 389 399
【输出样例】
2 1 3
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
这题做法是枚举。
V种维他命,G份饲料,不妨考虑最大值G=15、V=25。每种饲料枚举取or不取,大约是300,000种情况;每种情况分别用来更新当前最优解,耗时大约不到400。如此可见,本题枚举时间大约在120,000,000,而枚举法常数很小,故而完全可以在1s内完成。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
第二次提交AC。第一次犯了点细节错误,把G和V有点弄混的地方。
【吐槽】
这题我严重被自己坑了。。
一开始根本没往枚举法上想,觉得USACO Section2.1的题,怎么也应该有道难题了。。结果想了好长时间没想出做法来,然后一看——这G只有15!这不是完全可以枚举吗……
【再次吐槽】
博文竟然有重名。。今后解题报告标题后面都加上我id,我就不行还有重名-.-
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
/*
ID: icedrea1
PROB: holstein
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; int V,G;
int v[+],g[+][+];
bool now[+]; int r,s[+];
bool good[+]; bool better()
{
for(int k=;k<=G;++k)
{
if(now[k] && !good[k]) return true;
if(!now[k] && good[k]) return false;
}
}
void Try()
{
int cnt=,sum[+]={};
for(int k=;k<=G;++k)
if(now[k])
{
++cnt;
for(int i=;i<=V;++i) sum[i]+=g[k][i];
}
for(int i=;i<=V;++i)
if(sum[i]<v[i]) return; // 失败
if(cnt<r || cnt==r && better())
{
r=cnt;
for(int k=;k<=G;++k) good[k]=now[k];
}
} void go(int k) //前k组要不要已定
{
if(k==G) { Try(); return; }
++k; go(k);
now[k]=true; go(k); now[k]=false;
} int main()
{
ifstream in("holstein.in");
ofstream out("holstein.out"); in>>V;
for(int i=;i<=V;++i) in>>v[i];
in>>G;
for(int k=;k<=G;++k)
for(int i=;i<=V;++i) in>>g[k][i]; r=G+; go(); out<<r;
for(int k=;k<=G;++k)
if(good[k]) out<<" "<<k;
out<<endl; in.close();
out.close();
return ;
}
USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】的更多相关文章
- USACO Section2.1 The Castle 解题报告
castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section2.1 Ordered Fractions 解题报告
frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Controlling Companies 解题报告 【icedream61】
concom解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Money Systems 解题报告 【icedream61】
money解题报告------------------------------------------------------------------------------------------- ...
- USACO Section2.3 Zero Sum 解题报告 【icedream61】
zerosum解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】
nocows解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Longest Prefix 解题报告 【icedream61】
prefix解题报告------------------------------------------------------------------------------------------ ...
随机推荐
- ABAP和Java SpringBoot的单元测试
ABAP 在ABAP类里,本地类(Local Class)里用关键字FOR TESTING声明过的方法, 在单元测试启动后会自动被调用到. Spring Boot 在Spring及Spring Boo ...
- Kruskal算法求最小生成树(POJ2485)
题目链接:http://poj.org/problem?id=2485 #include <iostream> #include <stdio.h> #include < ...
- 宝塔linux面板,修改root密码
root,密码忘记了.但宝塔vps的密码没忘记... 翻完宝塔linux面板都没看到有修改系统root密码的选项,后来尝试定时任务shell,也没成功, 最终快绝望的时候,发现通过添加插件成功修改密码 ...
- CentOS安装配置MongoDB
1.下载安装包: wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.3.tgz 2.解压: tar -zxvf mongodb-l ...
- PHP精度问题
PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述 bcadd — 加法bccomp — 比较bcdiv — 相除bcmo ...
- multi-view datasets
http://rll.berkeley.edu/2014_ICRA_dataset/ http://rgbd-dataset.cs.washington.edu/dataset/
- 【杂题总汇】Codeforces-67A Partial Teacher
[Codeforces-67A]Partial Teacher 上周刷了一大堆小紫薯的动态规划的题
- Zeppelin interperter 模式设置总结图解2
该配置是在zeppelin的Interpreter的后台配置文件:conf/Interpreter.json spark Interpreter的模块定义那里.特别感谢开发团队组长大神的提示,深入挖掘 ...
- 7-1 python 操作redis
1.安装并导入redis模块 # pip install redis 安装redis模块 import redis # 导入redis模块 2.连接一个或多个redis,指定数据库名,并指定返回字符串 ...
- css3 媒体查询的学习。
1.什么是媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度.屏幕比例.设备方向:横向或纵向)为其设定CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成.媒体查询中可用于 ...