题目大意:
给出一头牛V种所需维他命的所需最小量,以及喂给牛的G种种类的饲料,问所需的饲料种类数最少是多少。
1<=V<=25
1<=维他命的最小量<=1000
1<=G<=15
题解:
dfs搜出所有组合情况判断即可。
代码:
#include <bits/stdc++.h>
#define INF 2333333
#define N 1005
using namespace std;
int ans[N],a[N],b[N][N],c[N];
int n,m,cmin;
bool check(int x)
{
for(int i=1; i<=n; i++)
{
int cp=0;
for(int j=1; j<=x; j++) cp+=b[c[j]][i];
if(cp<a[i]) return 0;
}
return 1;
}
void dfs(int dep,int rp)
{
if (dep==m+1)
{
if (check(rp-1) && cmin>=rp)
{
cmin=rp-1;
for (int i=1; i<=cmin; i++) ans[i]=c[i];
}
return;
}
c[rp]=dep;
dfs(dep+1,rp+1);
c[rp]=0;
dfs(dep+1,rp);
}
int main()
{
scanf("%d",&n);
for (int i=1; i<=n; i++) scanf("%d",&a[i]);
scanf("%d",&m);
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++) scanf("%d",&b[i][j]);
cmin=INF;
dfs(1,1);
printf("%d ",cmin);
for(int i=1; i<=cmin; i++) printf("%d ",ans[i]);
return 0;
}