如题
#include<bits/stdc++.h>
using namespace std;
int v,v0[30],g,g0[20][30],c[20],ans=1e9,r[30],ans0[30];
bool c0[20];
void dfs(int x){
if(x-1>g) return ;
if(x-1>ans) return ;
int sum=0;
for(int i=1;i<=v;i++){
if(v0[i]<=c[i]) sum++;
else break;
}
if(sum==v){
ans=min(ans,x-1);
if(ans==x-1){
for(int i=1;i<=x;i++){
ans0[i]=r[i];
}
}
return ;
}
for(int i=g-x+1;i>=1;i--){
if(!c0[i]){
r[x]=i;
c0[i]=1;
for(int j=1;j<=v;j++) c[j]+=g0[i][j];
dfs(x+1);
for(int j=1;j<=v;j++) c[j]-=g0[i][j];
c0[i]=0;
}
}
}
int main(){
cin>>v;
for(int i=1;i<=v;i++) cin>>v0[i];
cin>>g;
for(int i=1;i<=g;i++){
for(int j=1;j<=v;j++) cin>>g0[i][j];
}
dfs(1);
cout<<ans<<' ';
sort(ans0+1,ans0+1+ans);
for(int i=1;i<=ans;i++) cout<<ans0[i]<<' ';
return 0;
}