level 8
#include<fstream>
#include<iostream>
/*
ID: 59402471
LANG: C++
TASK: holstein
*/
using namespace std;
int V,G,Min=10000;
int need[30],a[50][50];
int ans[20],path[20],now[20];
ifstream fin ("holstein.in");
ofstream fout ("holstein.out");
void dfs(int deep,int count)
{
int i;
if(deep==G)
{
for(i=0;i<V;i++)
if(now[i]<need[i])
return;
if(count<Min)
{
Min=count;
for(i=0;i<count;++i)
ans[i]=path[i];
}
}
for(i=0;i<V;i++)
now[i]+=a[deep][i];
path[count+1]=deep;//记录路径
dfs(deep+1,count+1);
for(i=0;i<V;i++)
now[i]-=a[deep][i];//当前点不要了
dfs(deep+1,count);
}
int main()
{
int i,j,k;
fin>>V;
for(i=0;i<V;i++)
fin>>need[i];
fin>>G;
for(i=0;i<G;i++)
for(j=0;j<V;j++)
fin>>a[i][j];
dfs(0,0);
fout<<Min;
for(i=0;i<Min;i++)
fout<<" "<<ans[i];
fout<<endl;
fin.close();
fout.close();
return 0;
}
2012年06月06日 08点06分