通过回溯搜索满足第一种维他命的情况,然后用这种情况检验其余维他命是否满足
`#include
int v,lst[27],g,lst_v[17][27],p=0,f=1;
int index[17]={0};
int My_sum(int n){
int sum=0;
for(int i=0;i<g;i++){
if(index[i]) sum+=lst_v[i][n];
}
return sum;
}
int pend(){
for(int i=1;i<v;i++){
if(My_sum(i)<lst[i]) return 0;
}
return 1;
}
void search(int n,int* index,int t){
if(n0){
if(My_sum(0)>=lst[0]){
if(pend()){
printf("%d",p);
f=0;
for(int i=0;i<g;i++){
if(index[i]){
printf(" %d",i+1);
}
}
return;
}
}
}
if(t>=g) return;
for(int i=t;i<g;i++){
index[i]=1;
search(n-1,&index[0],i+1);
if(f0) break;
index[i]=0;
}
return;
}
int main(){
scanf("%d",&v);
for(int i=0;i<v;i++){
scanf("%d",&lst[i]);
}
scanf("%d",&g);
for(int i=0;i<g;i++){
for(int j=0;j<v;j++){
scanf("%d",&lst_v[i][j]);
}
}
for(p=1;p<=g;p++){
search(p,index,0);
if(f==0) break;
}
return 0;
} `