您的位置:首页 > 其它

Healthy Holsteins(USACO 2.1.4)

2015-09-25 20:34 309 查看
暴力枚举,使用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: