柯昊阳 • 1年前
using namespace std; int n,a[35],m,b[35][35],path[30],MIN = INT_MAX; int Min=INT_MAX; vector Path; vector ans; bool abc() {
for(int i=1;i<=n;i++)
{
if(path[i]<a[i])
{
return 0;
}
}
return 1;
} void dfs(int now,int MIN){
if(abc()==1){
if(now<Min){
Min=now;
ans.clear();
for(int i=0;i<Path.size();i++) ans.push_back(Path[i]);
}
return ;
}
for(int i=MIN;i<=m;i++){
Path.push_back(i);
for(int j=1;j<=n;j++) path[j]+=b[i][j];
dfs(now+1,i+1);
Path.pop_back();
for(int j=1;j<=n;j++) path[j]-=b[i][j];
}
} int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) cin>>b[i][j];
dfs(0,1);
cout<<Min<<" ";
for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
cout<<endl;
return 0;
}
评论: