提交时间:2024-01-23 09:31:53

运行 ID: 123755

#include<bits/stdc++.h> using namespace std; int n; int a[35]; int m; int b[30][50]; int d[30]; int minn=11451419; vector<int> dd; vector<int> ans; bool check(){ for(int i=1;i<=n;i++) if(d[i]<a[i])return false; return true; } void dfs(int cur,int minn){ if(check()){ if(cur<minn){ minn=cur; while(ans.size()>0) ans.pop_back(); for(int i=0;i<dd.size();i++) ans.push_back(dd[i]); } return ; } for(int i=minn;i<=m;i++){ dd.push_back(i); for(int j=1;j<=n;j++) d[j]+=b[i][j]; dfs(cur+1,i+1); dd.pop_back(); for(int j=1;j<=n;j++) d[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<<minn<<" "; for(int i=0;i<ans.size();i++) cout<<ans[i]<<" "; cout<<endl; return 0; }