比赛 20140714上午练习 评测结果 AAAAAAAAAA
题目名称 荷斯坦奶牛 最终得分 100
用户昵称 wolf 运行时间 0.008 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2014-07-14 10:03:12
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
class Vt{
public:
	int num;
	vector<int> V;
	Vt(int a){
		num=a;
	}
};
FILE *in,*out;
int N,every,G;
vector<Vt> all;
vector<int> need;
vector<int> way;
vector<int> end;
void pri(vector<int> &a){
	for(int i=0;i!=a.size();++i){
		fprintf(out,"%d  ",a[i]);
		//cout<<a[i]<<"  ";
	}
	//cout<<endl;
}
void work(int n,bool a){
	if(a){
		for(int i=0;i!=N;++i){
			need[i]=need[i]-all[n].V[i];
		}
	}else{
		for(int i=0;i!=N;++i){
			need[i]=need[i]+all[n].V[i];
		}
	}
}
/////////////////////
bool ch(){
	for(int i=0;i!=need.size();++i){
		if(need[i]>0)
			return 0;
	}
	return 1;
}
void core(int t){
	//cout<<t<<endl;
	if(ch()&&way.size()<end.size()){
		end=way;
	}
	for(int i=t+1;i!=G;++i){
		work(i,1);
		way.push_back(i+1);
		core(i);
		work(i,0);
		way.pop_back();
	}
}
int main(){
	in=fopen("holstein.in","r");
	out=fopen("holstein.out","w");
	fscanf(in," %d",&N);
	for(int i=0;i!=N;++i){
		int e;
		fscanf(in," %d",&e);
		need.push_back(e);
	}
	fscanf(in," %d",&G);
	for(int i=1;i!=G+1;++i){
		Vt e(i);
		for(int i=0;i!=N;++i){
			int c;
			fscanf(in," %d",&c);
			e.V.push_back(c);
		}
		all.push_back(e);
	}
	end.resize(20);
	core(-1);
	fprintf(out,"%d  ",end.size());
	pri(end);
	return 0;
}
//designed by wolf