#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
Healthy Holsteins
最新推荐文章于 2024-06-30 17:50:57 发布