70分求助
#include<bits/stdc++.h>
using namespace std;
int v,g,al[30],vtl[30],sl[30][20],u,an=1e8;
bool b[30],k[30];
inline bool pd(void){
for(int i=1;i<=v;i++){
if(al[i]<vtl[i]){
return 0;
}
}
return 1;
}
inline void add(int a){
for(int i=1;i<=v;i++){
al[i]+=sl[a][i];
}
}
inline void cut(int a){
for(int i=1;i<=v;i++){
al[i]-=sl[a][i];
}
}
void dfs(void){
if(pd()){
if(u<an){
an=u;
for(int i=1;i<=g;i++){
k[i]=b[i];
}
}
}
for(int i=1;i<=g;i++){
if(b[i]){
continue;
}
add(i);
b[i]=1;
u++;
dfs();
u--;
b[i]=0;
cut(i);
}
}
int main(){
cin>>v;
for(int i=1;i<=v;i++){
cin>>vtl[i];
}
cin>>g;
for(int i=1;i<=g;i++){
for(int j=1;j<=v;j++){
cin>>sl[i][j];
}
}
dfs();
cout<<an<<" ";
for(int i=1;i<=g;i++){
if(k[i]){
cout<<i<<" ";
}
}
return 0;
}
请快快回复