提交时间:2024-01-23 09:52:52

运行 ID: 123798

#include<bits/stdc++.h> using namespace std; int n,a[35],m,b[35][35],path[30],MIN = INT_MAX; int Min=INT_MAX; vector <int> Path; vector <int> 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; }