码迷,mamicode.com
首页 > 其他好文 > 详细

【USACO 2.1】Healthy Holsteins

时间:2016-09-30 20:59:23      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

/*
TASK: holstein
LANG: C++
URL: http://train.usaco.org/usacoprob2?a=SgkbOSkonr2&S=holstein
SOLVE: con[i][j]为食物i含有维生素j的量,ned[i]为需要的维生素i的量
bfs,用二进制保存状态
 */
#include<cstdio>
#define N 30
int v,g,ned[N],con[N][N];
int now[N];
int l,r,q[40000];
bool vis[40000];
bool ck(int s){
	//check whether state s is satisfied
	for(int i=1;i<=v;i++){
		int tol=0;
		for(int j=0;j<g;j++)
			if((1<<j)&s)
				tol+=con[j][i];
		if(tol<ned[i])return 0;
	}
	return 1;
}
void bfs(){
	while(l<=r){
		int k=q[l++];
		if(ck(k)){
			int num=0;
			for(int i=0;i<g;i++)
				if((1<<i)&k)
					num++;
			printf("%d",num);
			for(int i=0;i<g;i++)
				if((1<<i)&k)
					printf(" %d",i+1);
			puts("");
			return;
		}
		for(int i=0;i<g;i++)
			if(!vis[k|(1<<i)]){
				q[++r]=k|(1<<i);
				vis[k|(1<<i)]=1;
			}
	}
}
int main(){
	freopen("holstein.in","r",stdin);
	freopen("holstein.out","w",stdout);
	scanf("%d",&v);
	for(int i=1;i<=v;i++)
		scanf("%d",&ned[i]);
	scanf("%d",&g);
	for(int i=0;i<g;i++)
		for(int j=1;j<=v;j++)
			scanf("%d",&con[i][j]);
	bfs();
}

  

【USACO 2.1】Healthy Holsteins

标签:

原文地址:http://www.cnblogs.com/flipped/p/5924775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!