比赛 20140714上午练习 评测结果 AAAAAAAAAA
题目名称 荷斯坦奶牛 最终得分 100
用户昵称 752199526 运行时间 0.011 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2014-07-14 11:21:55
显示代码纯文本
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include <cstdlib>
#include<cstring>
#include<cctype>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<cassert>
#include<algorithm>
#include<functional>
#include<ctime>
using namespace std;
ifstream fin("holstein.in");
ofstream fout("holstein.out");
int V,G,standard[30]={0},plan[30]={0},best=30,nutrition[30][30];
bool mark[30]={false};
void search(int i,int ans)
{
	if(ans>best)return;
	else 
	{
		if(i>G)
		{
			int lll=V+1;
			int temp[lll];
			memset(temp,0,sizeof(temp));
			for(int j=1;j<=G;j++)
			{
				if(mark[j])
				{
					for(int k=1;k<=V;k++)temp[k]+=nutrition[j][k];
				}
			}
			bool OK=true;
			for(int m=1;m<=V;m++)
			{
				if(standard[m]>temp[m]){OK=false;break;}
			}
			if(OK)
			{
				memset(plan,0,sizeof(plan));
				best=ans;
				for(int n=1,ll=0;n<=G;n++)
				{
					if(mark[n])plan[ll++]=n;
				}
			}
		}
		else
		{
			search(i+1,ans);
			mark[i]=true;
			search(i+1,ans+1);
			mark[i]=false;
		}
	}
}
int main()
{
	//Init
	fin>>V;
	for(int i=1;i<=V;i++)fin>>standard[i];
	fin>>G;
	for(int i=1;i<=G;i++)
	{
		for(int j=1;j<=V;j++)
			fin>>nutrition[i][j];
	}
	//Search
	search(1,0);
	fout<<best<<" ";
	for(int i=0;i<best;i++)fout<<plan[i]<<" ";
	return 0;
}