向大佬们求助。
90pts,第七个点 WA。
#include<bits/stdc++.h>
#define N 50
using namespace std;
int v,g,vv[N],gg[N][N],ans[N],sum,vis[N],mini=1e9;
queue<int>q;
void dfs(int x){
if(x>g){
for(int i=1;i<=v;i++){
if(ans[i]<vv[i])return;
}
if(sum<mini){
while(!q.empty())q.pop();
mini=sum;
for(int i=1;i<=v;i++){
if(vis[i])q.push(i);
}
}
return;
}
for(int i=1;i<=v;i++)ans[i]+=gg[x][i];
sum++;
vis[x]=1;
dfs(x+1);
for(int i=1;i<=v;i++)ans[i]-=gg[x][i];
sum--;
vis[x]=0;
dfs(x+1);
}
int main(){
cin>>v;
for(int i=1;i<=v;i++)cin>>vv[i];
cin>>g;
for(int i=1;i<=g;i++){
for(int j=1;j<=v;j++)cin>>gg[i][j];
}
dfs(1);
cout<<mini<<" ";
while(!q.empty()){
cout<<q.front()<<" ";
q.pop();
}
return 0;
}