Healthy Holsteins(USACO 2.1.4)
2015-09-25 20:34
309 查看
暴力枚举,使用bitset优化
bitset在此处用作枚举状态空间
bitset在此处用作枚举状态空间
#include <iostream> #include <fstream> #include <string.h> #include <bitset> using namespace std; #ifdef LOCAL ofstream fout ("out.txt"); ifstream fin ("in.txt"); #else ofstream fout ("holstein.out"); ifstream fin ("holstein.in"); #endif int num1[50]; int res[50]; int num2[50][50]; bitset <16> minbit(0); int main() { int vc; int num_vitamin; fin >> num_vitamin; for (int i = 0; i < num_vitamin; ++i) fin >> num1[i]; int num_feed; fin >> num_feed; for (int j = 0; j < num_feed; ++j) for (int i = 0; i < num_vitamin; ++i) fin >> num2[j][i]; vc = 17; for (int m = 0; m < (1<<num_feed); ++m) { bitset <16> bit(m); memset(res, 0, sizeof(res)); for (int i = 0; i < num_feed; ++i) { if(bit[i]) { for (int j = 0; j < num_vitamin; ++j) { res[j] += num2[i][j]; } } } int flag = 1; for (int i = 0; i < num_vitamin; ++i) { if(res[i] < num1[i]) { flag = 0; break; } } if(!flag) continue; if(bit.count() < vc && bit.to_ulong() > minbit.to_ulong()) { vc = bit.count(); minbit = bit; } } fout<<vc; for (int i = 0; i < num_feed; ++i) { if(minbit[i]) fout<<' '<<i+1; } fout<<endl; return 0; }
相关文章推荐
- markDown学习笔记
- 黑马程序员—java技术blog—第九篇一些常见的基础语法概述
- php脚本的一些注意事项
- 找出两个点之间的所有路径(原创)
- 二维数组变一维
- More Effective C++ 条款22 考虑以操作符复合形式(op=)取代其独身形式(op)
- 专业实训题目需求分析
- HOJ 1004 ACM刷题记录
- 总结别人的结果,sigchld信号处理,和close与shutdown的区别
- jQuery Table2CSV插件(表格转CSV) 完美支持colspan和rowspan
- 转换数据类型求和
- SlickGrid 插件开发(1):插件功能总结 转载
- 一些常用的正则表达式
- 《机器学习与R语言》读书笔记3:数据的管理和理解
- 处理出租车计价器数据,计算空驶时间,即相邻两条记录相减
- linux下段错误相关资料-备查
- 纯CSS绘制基本图形
- R操作数据库里面的数据
- HDU 1698 Just a Hook(线段树-区间修改|区间查询)
- 如何用Netbeans加背景图片