Healthy Holsteins

#include<fstream>
using namespace std;
int n;//保存维生素的种类数,n<30
int v[30];//每天需要的每种维生素数
int m;//保存饲料种类数,m<20
int s[20][30];//每种饲料含有的维生素含量
int mins=10000;//保存最少的饲料种类数
int now_num[30]={0};//保存当前各种维生素的含量,共n个
int now_a[20];//保存当前满足条件的每种饲料种类,共mins个
int res_a[20];//保存满足条件的每种饲料种类,共mins个
int i,j;
void DFS(int k,int sum)//k:当前第k种饲料,但还没有加入到sum种,sum:当前的饲料种类
{
	if(k==m+1)
	{
		for(i=1;i<=n;i++)
		{
			if(now_num[i]<v[i])
				return;
		}
		if(sum<mins)
		{
			mins=sum;
			for(i=1;i<=mins;i++)
			{
				res_a[i]=now_a[i];
			}
		}
		return;
	}
	for(i=1;i<=n;i++)
		now_num[i]+=s[k][i];
	now_a[sum+1]=k;
	DFS(k+1,sum+1);
	for(i=1;i<=n;i++)
		now_num[i]-=s[k][i];
	DFS(k+1,sum);
}
int main()
{
	ifstream fin ("holstein.in");
	ofstream fout ("holstein.out");
	fin>>n;
	for(i=1;i<=n;i++)
	{
		fin>>v[i];
	}
	fin>>m;
	for(i=1;i<=m;i++)
	{
		for(j=1;j<=n;j++)
		{
			fin>>s[i][j];
		}
	}
	DFS(1,0);
	fout<<mins;
    for (i=1;i<=mins;i++)
        fout<<" "<<res_a[i];
    fout<<endl;
    return 0;
}
参考链接:
http://hi.baidu.com/yyvszh/item/80f1f72dbaa1fa9cb7326354
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值